[A 경제용어사전] '베어마켓·불마켓(bear·bull market)'


황소(Bull)
황소 시장(Bull Market)은 주가가 전반적으로 상승하는 시장 상태를 나타내며, 이는 경제의 성장, 기업 실적 호조, 투자자들의 신뢰 증가 등으로 인해 발생합니다.
황소는 뿔을 위로 치켜들며 공격하는 습성 때문에 상승을 상징하게 되었습니다.
황소 시장에서는 투자자들이 적극적으로 주식을 매수하며, 이러한 매수세는 주가를 더욱 끌어올립니다.
역사적으로, '황소'는 19세기 초부터 금융가들 사이에서 사용되기 시작했습니다.
이 용어는 특히 뉴욕 증권거래소(NYSE)가 발달하면서 더욱 널리 퍼졌습니다.
황소 시장은 경제의 번영기와 맞물리며, 투자자들에게 높은 수익을 안겨주는 시기로 평가받습니다.

곰 (Bear)
곰은 증권시장에서 비관적인 분위기와 하락장을 상징합니다.
곰 시장(Bear Market)은 주가가 전반적으로 하락하는 시장 상태를 의미하며, 이는 경제 불황, 기업 실적 악화, 투자자들의 불안감 증가 등으로 인해 발생합니다.
곰은 발톱을 아래로 내리치는 습성 때문에 하락을 상징하게 되었습니다.
곰 시장에서는 투자자들이 주식을 매도하며, 이러한 매도세는 주가를 더욱 끌어내립니다.
'곰' 역시 19세기 초부터 금융가들 사이에서 사용되기 시작했습니다.
곰 시장은 경제의 불황기와 맞물리며, 투자자들에게 큰 손실을 안겨주는 시기로 평가받습니다.

 

(한국.거래소의 황소와 곰의 모습)

KRX 정보분배데이타,수신서버및 HomeTrade 제작

내용)

1. KRX 정보분배데이타 송신 SYSTEM 제작
2. KRX 정보분배데이타 수신 SYSTEM 제작
2.1 - KRX 정보분배데이타 수신
2.2 - KRX 정보분배데이타 저장(SQLite)
2.3 - KRX 정보분배데이타 REDIS전송
2.4 - 클라이언트 로그인 관리
2.5 - 클라이언트 조회요청시 데이타 전송
3. Like HomeTradeSystem - Win MDI Application
3.1 - 로그인
3.2 - 조회및 데이타 실시간수신
4. 디버깅 - Windows SendMessage 활용


기술)
1. KRX 정보분배데이타 송신 SYSTEM 제작 -> c
2. KRX 정보분배데이타 수신 SYSTEM 제작 -> c# Console
2.1 - KRX 정보분배데이타 수신
2.2 - KRX 정보분배데이타 저장(SQLite) - SQLite DataBase
2.3 - KRX 정보분배데이타 REDIS전송 - Redis Server
2.4 - 클라이언트 로그인 관리
2.5 - 클라이언트 조회요청시 데이타 전송
3. Like HomeTradeSystem - Win MDI Application - c# Win Form
3.1 - 로그인
3.2 - 조회및 데이타 실시간수신


MENU& TREE를 동시에 구성


일별.캔들차드 추가(feat. CHAT.GPT)

 

REDIS.QUEUE.NAME WHEN RCV/SND
REDIS.QUEUE.NAME WHEN RCV/SND

 


dotnet new wpf -n sampleNM

error CS0246: 'Newtonsoft' 형식또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하세요.
>dotnet add package Newtonsoft.Json

error CS0246: 'ServiceStack' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하세요.
>dotnet add package ServiceStack

error CS0246: 'RedisClient' 형식 또는 네임스페이스 이름을 찾을 수 없습니다. using 지시문 또는 어셈블리 참조가 있는지 확인하세요.
>dotnet add package ServiceStack.Redis

KeyValuePair<TKey, TValue>는 C#에서 제공하는 구조체(struct)로, 키와 값을 쌍으로 묶어서 관리할 수 있게 해줍니다. 주로 컬렉션에서 특정 항목의 키와 값을 함께 다룰 때 사용됩니다.

주요 특징

  1. 제네릭 타입: KeyValuePair는 제네릭 타입으로, 키와 값의 데이터 타입을 지정할 수 있습니다. 예를 들어, KeyValuePair<int, string>는 정수형 키와 문자열 값을 가지는 쌍을 의미합니다.
  2. 구성: KeyValuePair는 두 개의 읽기 전용 속성, Key와 Value,으로 구성됩니다. Key는 쌍의 키를, Value는 쌍의 값을 나타냅니다.
  3. 불변성: KeyValuePair의 키와 값은 읽기 전용 속성으로 정의되어 있으며, 한 번 생성된 후에는 변경할 수 없습니다.

사용 예제

다음은 KeyValuePair를 사용하는 몇 가지 예제입니다.

1. 기본 사용

// KeyValuePair 생성 KeyValuePair<int, string> kvp = new KeyValuePair<int, string>(1, "Value"); // 키와 값에 접근 Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");

2. Dictionary에서 사용

Dictionary 클래스는 내부적으로 KeyValuePair를 사용하여 키와 값을 저장합니다.

Dictionary<string, int> dictionary = new Dictionary<string, int>(); // 키와 값을 추가 dictionary.Add("Apple", 1); dictionary.Add("Banana", 2); // Dictionary의 모든 항목을 반복 foreach (KeyValuePair<string, int> kvp in dictionary) { Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}"); }

3. LINQ와 함께 사용

LINQ를 사용할 때 KeyValuePair를 반환하는 메서드를 사용할 수 있습니다.

var list = new List<KeyValuePair<string, int>>() { new KeyValuePair<string, int>("Apple", 1), new KeyValuePair<string, int>("Banana", 2), }; var result = list.Where(kvp => kvp.Value > 1); foreach (var kvp in result) { Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}"); }

이와 같이 KeyValuePair는 다양한 상황에서 유용하게 사용될 수 있으며, 특히 컬렉션과 관련된 작업에서 많이 활용됩니다.




1. 

포트 21111은 로컬 호스트(127.0.0.1)에서만 수신 대기 상태입니다. 
이는 이 포트가 현재 시스템 내의 로컬 네트워크 인터페이스에서만 접근 가능하다는 것을 의미합니다. 
외부 네트워크에서 이 포트에 접근할 수 없습니다.
root@sinfo:~# netstat -an | grep 21111
tcp        0      0 127.0.0.1:21111         0.0.0.0:*               LISTEN


2. 

포트 21111은 모든 네트워크 인터페이스(0.0.0.0)와 로컬 IPv6 주소(::1)에서 수신 대기 상태입니다. 
이는 포트 21111 가 외부 네트워크와 로컬 네트워크 모두에서 접근 가능하다는 것을 의미합니다. 
root@sinfo:~# netstat -an | grep 21111
tcp        1      0 0.0.0.0:21111           0.0.0.0:*               LISTEN
tcp6       0      0 :::21111                :::*                    LISTEN
root@sinfo:~#

1번과 2번의 소스차이는(?)

#if(false)
        private void Init()
        {
            //소켓 객체 생성 (TCP 소켓)
            listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            //엔드포인트에 소켓 바인드(Bind)
            IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 21111);
            listener.Bind(localEndPoint);

            //Listen소켓의 대기열의 길이를 설정합니다.
            listener.Listen(10);

            PublicApiNM.SendToDebug(3, "()(Init)(Listen)");

            while (true)
            {
                try
                {
                    Socket handler = listener.Accept();

                    PublicApiNM.SendToDebug(3, "()(Init)(Accept)");

                    //richTextBox1.Text = richTextBox1.Text + "Socket handler = listener.Accept() OK" + "\n";

                    Thread RealSocModel = new Thread(new ParameterizedThreadStart(SocketRunHandler));
                    RealSocModel.Start(handler);
                }
                catch (Exception ex)
                {
                    //
                }
            }
            listener.Close();
        }
#endif
#if(true)
private void Init()
{
    // IPv4와 IPv6 소켓 객체 생성 (TCP 소켓)
    ipv4Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
    ipv6Listener = new Socket(AddressFamily.InterNetworkV6, SocketType.Stream, ProtocolType.Tcp);

    // IPv4와 IPv6 엔드포인트 설정
    IPEndPoint ipv4EndPoint = new IPEndPoint(IPAddress.Any, 21111); // 모든 IPv4 주소에서 수신 대기
    IPEndPoint ipv6EndPoint = new IPEndPoint(IPAddress.IPv6Any, 21111); // 모든 IPv6 주소에서 수신 대기

    // 소켓을 엔드포인트에 바인드
    ipv4Listener.Bind(ipv4EndPoint);
    ipv6Listener.Bind(ipv6EndPoint);

    // 소켓의 대기열 길이 설정
    ipv4Listener.Listen(10);
    ipv6Listener.Listen(10);

    PublicApiNM.SendToDebug(3, "()(Init)(Listen)");

    while (!_shouldStop)
    {
try
{
    // 소켓이 닫혔는지 확인하고, 닫혔으면 루프 종료
    if (ipv4Listener.Poll(1000, SelectMode.SelectRead) && ipv4Listener.Available == 0)
    {
break;
    }

    if (ipv6Listener.Poll(1000, SelectMode.SelectRead) && ipv6Listener.Available == 0)
    {
break;
    }

    // 클라이언트 연결 수신 대기
    Socket ipv4Handler = ipv4Listener.Accept();
    Socket ipv6Handler = ipv6Listener.Accept();

    PublicApiNM.SendToDebug(3, "()(Init)(Accept)");

    // 새 스레드에서 클라이언트 처리
    Thread ipv4Thread = new Thread(new ParameterizedThreadStart(SocketRunHandler));
    ipv4Thread.Start(ipv4Handler);

    Thread ipv6Thread = new Thread(new ParameterizedThreadStart(SocketRunHandler));
    ipv6Thread.Start(ipv6Handler);
}
catch (SocketException ex)
{
    if (_shouldStop)
    {
// _shouldStop이 true일 경우, listener가 닫히면서 예외 발생할 수 있음
break;
    }

    // 그 외의 소켓 예외 처리
    PublicApiNM.SendToDebug(3, "()(Init)(Exception):" + ex.Message);
}
catch (Exception ex)
{
    // 기타 예외 처리
    PublicApiNM.SendToDebug(3, "()(Init)(Exception):" + ex.Message);
}
    }

    // 소켓 닫기
    ipv4Listener.Close();
    ipv6Listener.Close();
    PublicApiNM.SendToDebug(3, "()(Init)(Stopped)");
}

public void StopInitThread()
{
    _shouldStop = true;

    // 소켓을 닫아 블로킹 호출에서 예외를 발생시키도록 함
    if (ipv4Listener != null)
    {
ipv4Listener.Close();
    }
    if (ipv6Listener != null)
    {
ipv6Listener.Close();
    }
}
#endif

windows->ubuntu migration(c#)

1. ubuntu.krx.recv.SQLite.redis.json Conver.redis send(by clientQueueKey)
- absolute path
- except using Forms

2. hometrade.redis.BlPOP.display.console


dotnet new console -o redisconsole
cd redisconsole
source coding..........................................................................................
dotnet build
dotnet run
dotnet add package Newtonsoft.Json
dotnet add package ServiceStack
dotnet add package ServiceStack.Redis

WPF에 Json데이타 표시(정보분배 - No Loop,Loop Case)

case1) 정보분배 - No Loop Case.
case2) 정보분배 - Loop Case.

<Window x:Class="sampleNM.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="REDIS Real Time BLPOP" Height="800" Width="1200"
        KeyDown="Window_KeyDown"
        WindowStartupLocation="Manual"
        Left="10"
        Top="10">
    <Grid>
        <!-- Define Rows for layout -->
        <Grid.RowDefinitions>
            <RowDefinition Height="0.1*" />  <!-- 10% of available space -->
            <RowDefinition Height="0.4*" />  <!-- 50% of available space -->
            <RowDefinition Height="0.2*" />  <!-- 40% of available space -->
            <RowDefinition Height="0.3*" />  <!-- 40% of available space -->
        </Grid.RowDefinitions>

        <!-- Container for Time data -->
        <ScrollViewer Grid.Row="0" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Margin="10">
            <Border BorderBrush="Black" BorderThickness="1" Margin="5">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="[Time Information]" FontWeight="Bold" FontSize="12" Margin="0,0,0,0"/>
                    <StackPanel x:Name="TimeStackPanel" Orientation="Vertical">
                        <!-- Time data will be loaded here -->
                    </StackPanel>
                </StackPanel>
            </Border>
        </ScrollViewer>

        <!-- Container for JSON data -->
        <ScrollViewer Grid.Row="1" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Margin="10">
            <Border BorderBrush="Black" BorderThickness="1" Margin="5">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="[REDIS JSON Information-NOT.LOOP.DATA]" FontWeight="Bold" FontSize="12" Margin="0,0,0,0"/>
                    <StackPanel x:Name="DataStackPanel" Orientation="Vertical">
                        <!-- JSON data will be loaded here -->
                    </StackPanel>
                </StackPanel>
            </Border>
        </ScrollViewer>

        <!-- Container for complex JSON data -->
        <ScrollViewer Grid.Row="2" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Margin="10">
            <Border BorderBrush="Black" BorderThickness="1" Margin="5">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="[REDIS COMPLEX.JSON Information-SECURITIES.TRADE]" FontWeight="Bold" FontSize="12" Margin="0,0,0,0"/>
                    <DataGrid x:Name="DataGrid" AutoGenerateColumns="False" Margin="10">
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="DataClass" Binding="{Binding DataClass}" />
                            <DataGridTextColumn Header="InfoMarketClass" Binding="{Binding InfoMarketClass}" />
                            <DataGridTextColumn Header="StockCode" Binding="{Binding StockCode}" />
                            <DataGridTextColumn Header="SerialNo" Binding="{Binding SerialNo}" />
                            <DataGridTextColumn Header="AskSecuritiesTradeNumber" Binding="{Binding AskSecuritiesTradeNumber}" />
                            <DataGridTextColumn Header="AskTradeVolume" Binding="{Binding AskTradeVolume}" />
                            <DataGridTextColumn Header="AskTradeAmount" Binding="{Binding AskTradeAmount}" />
                            <DataGridTextColumn Header="BidSecuritiesTradeNumber" Binding="{Binding BidSecuritiesTradeNumber}" />
                            <DataGridTextColumn Header="BidTradeVolume" Binding="{Binding BidTradeVolume}" />
                            <DataGridTextColumn Header="BidTradeAmount" Binding="{Binding BidTradeAmount}" />
                            <DataGridTextColumn Header="EndOfText" Binding="{Binding EndOfText}" />
                        </DataGrid.Columns>
                    </DataGrid>
                </StackPanel>
            </Border>
        </ScrollViewer>

        <!-- Container for complex JSON data -->
        <ScrollViewer Grid.Row="3" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled" Margin="10">
            <Border BorderBrush="Black" BorderThickness="1" Margin="5">
                <StackPanel Orientation="Vertical">
                    <TextBlock Text="[REDIS COMPLEX.JSON Information-QUOTE.10]" FontWeight="Bold" FontSize="12" Margin="0,0,0,0"/>
                    <DataGrid x:Name="QuoteDataGrid" AutoGenerateColumns="False" Margin="10">
                        <DataGrid.Columns>
                            <DataGridTextColumn Header="DataClass" Binding="{Binding DataClass}" />
                            <DataGridTextColumn Header="InfoMarketClass" Binding="{Binding InfoMarketClass}" />
                            <DataGridTextColumn Header="DistributeStockIndex" Binding="{Binding DistributeStockIndex}" />
                            <DataGridTextColumn Header="BoardID" Binding="{Binding BoardID}" />
                            <DataGridTextColumn Header="SessionID" Binding="{Binding SessionID}" />
                            <DataGridTextColumn Header="StockCode" Binding="{Binding StockCode}" />
                            <DataGridTextColumn Header="StockSeq" Binding="{Binding StockSeq}" />
                            <DataGridTextColumn Header="TradingProcessingTime" Binding="{Binding TradingProcessingTime}" />
                            <DataGridTextColumn Header="AskQuote" Binding="{Binding AskQuote}" />
                            <DataGridTextColumn Header="BidQuote" Binding="{Binding BidQuote}" />
                            <DataGridTextColumn Header="AskQuoteVolume" Binding="{Binding AskQuoteVolume}" />
                            <DataGridTextColumn Header="BidQuoteVolume" Binding="{Binding BidQuoteVolume}" />
                            <DataGridTextColumn Header="TotalAskQuoteRemainder" Binding="{Binding TotalAskQuoteRemainder}" />
                            <DataGridTextColumn Header="TotalBidQuoteRemainder" Binding="{Binding TotalBidQuoteRemainder}" />
                            <DataGridTextColumn Header="EstimatedTradePrice" Binding="{Binding EstimatedTradePrice}" />
                            <DataGridTextColumn Header="EstimatedTradeVolume" Binding="{Binding EstimatedTradeVolume}" />
                            <DataGridTextColumn Header="EndText" Binding="{Binding EndText}" />
                        </DataGrid.Columns>
                    </DataGrid>
                </StackPanel>
            </Border>
        </ScrollViewer>
    </Grid>
</Window>

+ Recent posts