⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jesse.cpp

📁 Jesse Livermore 方法,和三线翻转方法
💻 CPP
📖 第 1 页 / 共 2 页
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Jesse.h"
#include "stdio.h"
#include "Unit2.h"
#include "bar.h"

// 次级回升,自然回升,上升趋势,下降趋势,自然回撤,次级回撤
float     SubRise[MAX_DAYS],
        NaturalRise[MAX_DAYS],
        RiseTrend[MAX_DAYS],
        DropTrend[MAX_DAYS],
        NatralDrop[MAX_DAYS],
        SubDrop[MAX_DAYS]; 
// 当前记录栏指针, 当前数据指针
int      CurrentCol=0;
// 最近的 次级回升,自然回升,上升趋势,下降趋势,自然回撤,次级回撤 的索引
// 即 次级回升,自然回升,上升趋势,下降趋势,自然回撤,次级回撤
// 所对应的 position 在数组中的下标
int  LatestSubRise, LatestNaturalRise, LatestRiseTrend,
     LatestSubDrop, LatestNaturalDrop, LatestDropTrend;


//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
        {
        }
//---------------------------------------------------------------------------


void TForm1::ReadData(char*filename)
        {
        FILE*data;
        char date[10], str[1024];
        int C, O, H, L, m, d, y;
        float M, CC;
        char fn[1024];

       
        //OpenDialog1->Execute();
        sprintf(fn,"%s", OpenDialog1->FileName);
        data = fopen(filename,"rt");
        if(NULL==data)return;

        nill=0;
        //读出历史数据
        while (!feof(data))
                {
                fscanf(data, "%s\n",str);
                for(int i=0;i<strlen(str);i++)
                   {
                   if(*(str+i)==',')*(str+i)=' ';
                   if(*(str+i)=='/')*(str+i)='-';
                   }
                sscanf(str, "%s %f %f %f %f",
                TradeDate[nill],

                &OpenPrice[nill],
                &HighPrice[nill],
                &LowPrice[nill],
                &ClosePrice[nill]
                );
                sscanf(str, "%d-%d-%d",MM+nill, DD+nill, YYYY+nill );
                //&M, &CC);
                //TradeDate[nill]=AnsiString(m)+"."+AnsiString(d)+"."+AnsiString(y);
                nill++;
                }
        fclose(data);
        StringGrid1->RowCount = nill+3;

        }

void    TForm1::JesseProcess( int StartPoint,int Alt )
        {
        int  ConvIndex;
        AnsiString TrendConvSymbol[]={
        "?▽",  "v↑",  "↗",  "~",   "↗",
        "'",   "?△",  "↘",  "^↓",   "~",
        "↘",  "'",   "^↘",  "^",  "↘",
        "↖",  "↓",  "↑",  "▲",  "↘",
        "△",   "▽"};
        enum
        {
        NaturalDropToDrop,
        //NaturalDropToDrop,
        NaturalDropToRise,
        NaturalDropToNaturalRise,
        NaturalDropToNaturalDrop,
        DropToNaturalRise,

        DropToDrop,
        //NaturalRiseToRise,
        NaturalRiseToRise,
        NaturalRiseToNaturalDrop,
        NaturalRiseToDrop,
        NaturalRiseToNaturalRise,

        RiseToNaturalDrop,
        RiseToRise,
        NaturalRiseToSubDrop,
        SubDropToSubDrop,
        SubDropToNaturalDrop,

        NaturalDropToSubRise,
        SubRiseToSubDrop,
        SubRiseToNaturalRise
        };

        int
        RiseTrendRedUnderlined,
        NaturalDropRedUnderlined,
        DropTrendBlackUnderlined,
        NaturalRiseBlackUnderlined;
        float     //
        RiseTrendRedUnderlinedPrice,
        NaturalRiseBlackUnderlinedPrice,
        DropTrendBlackUnderlinedPrice,
        DropTrendRedUnderlinedPrice,
        NaturalDropRedUnderlinedPrice;

        //RiseTrendRedUnderlinedPrice   = 99999;
        NaturalRiseBlackUnderlinedPrice=99999;
        //DropTrendRedUnderlinedPrice   =0;
        NaturalDropRedUnderlinedPrice=0;
        //RiseTrendRedUnderlined=
        //NaturalRiseBlackUnderlined=0;

        //DropTrendBlackUnderlined=0;

        //选择分析使用的价格,开盘价,收盘价,最高价,最低价
        if(Form2)
        {
        if(Form2->RadioGroup2->ItemIndex==0)Price=ClosePrice;
        if(Form2->RadioGroup2->ItemIndex==1)Price=HighPrice;
        if(Form2->RadioGroup2->ItemIndex==2)Price=OpenPrice;
        if(Form2->RadioGroup2->ItemIndex==3)Price=LowPrice;
        //if(RadioGroup2->ItemIndex==1)Delta=Delta/10;
        //if(RadioGroup2->ItemIndex==2)Delta=Delta/100;
        CurrentCol = Form2->RadioGroup1->ItemIndex+1;
        }
        else Price=ClosePrice;
        Delta = Alt;

        //清除文本表格原有内容
        for(int i=0; i<StringGrid1->ColCount;i++)
        for(int j=0; j<StringGrid1->RowCount;j++)
        StringGrid1->Cells[i][j] = "            ";

        //填写文本表格抬头内容
        StringGrid1->Cells[YYMMDD][0]         = "日期△="+AnsiString(Delta);
        StringGrid1->Cells[SUBRISE][0]        = "次级回升";
        StringGrid1->Cells[NATURALRISE][0]    = "自然回升";
        StringGrid1->Cells[RISETREND][0]      = "上升趋势";
        StringGrid1->Cells[DROPTREND][0]      = "下降趋势";
        StringGrid1->Cells[NATURALDROP][0]    = "自然回撤";
        StringGrid1->Cells[SUBDROP][0]        = "次级回撤";
        StringGrid1->Cells[N][0]              = "情况";


        /*        初始化记录栏目以及初始价格数据        */

        //CurrentCol=NATURALRISE;
        //CurrentCol=RISETREND;
        //CurrentCol=DROPTREND;
        //CurrentCol = 1+Form2->RadioGroup1->ItemIndex;

        LatestSubRise   = LatestNaturalRise
                        = LatestRiseTrend
                        = LatestSubDrop
                        = LatestNaturalDrop
                        = LatestDropTrend
                        //= ClosePrice[0];
                        = 0;
/*{ 情况1:在自然回撤栏记录数据,当价格出现回落,幅度低于上升趋势最低点
选定点数△时,开始转换记录栏
} */
   for  ( int i=StartPoint;i< nill; i++ )
        {
        StringGrid1->Cells[YYMMDD][i] = AnsiString(TradeDate[i]);

         // 4-a , 6-a , 上升趋势 --------自然回撤, 在上升趋势最高价下面画红线
        if      (CurrentCol==RISETREND && (Price[i]+Delta < Price[LatestRiseTrend]))
                {
                StringGrid1->Cells[N][i] = "4-a,6-a:"+AnsiString(Price[i])+ "<"+AnsiString(Price[LatestRiseTrend])+"-" +AnsiString(Delta);
                RiseTrendRedUnderlinedPrice=Price[LatestRiseTrend];
                RiseTrendRedUnderlined  = LatestRiseTrend;
                LatestNaturalDrop       = i;
                CurrentCol              = NATURALDROP;
                Trend[i]=CurrentCol;
                ConvIndex               = RiseToNaturalDrop;
                StringGrid1->Cells[CurrentCol][i] = AnsiString(TrendConvSymbol[ConvIndex])+AnsiString(Price[i]);
                StringGrid1->Cells[RISETREND][RiseTrendRedUnderlined] = "_"+AnsiString(Price[RiseTrendRedUnderlined])+"_";
                continue;
                }
        // 4-b 自然回撤-----上升趋势,在自然回撤最低价下面画红线
        if      (CurrentCol==NATURALDROP && Price[i]>Price[LatestNaturalDrop]+ Delta && Price[i]>(Price[LatestRiseTrend]) )
                {
                StringGrid1->Cells[N][i] = "4-b:"+AnsiString(Price[i])+ ">" + AnsiString(Delta)+"+"+AnsiString(Price[LatestNaturalDrop]);
                NaturalDropRedUnderlinedPrice= Price[LatestNaturalDrop];
                NaturalDropRedUnderlined=LatestNaturalDrop;
                LatestRiseTrend         = i;
                CurrentCol              = RISETREND;
                Trend[i]=CurrentCol;
                ConvIndex               = NaturalDropToRise;
                StringGrid1->Cells[CurrentCol][i] = AnsiString(TrendConvSymbol[ConvIndex])+AnsiString(Price[i]);
                StringGrid1->Cells[NATURALDROP][NaturalDropRedUnderlined] = "_"+AnsiString(Price[NaturalDropRedUnderlined])+"_";
                continue;
                }

        //  4-b,6-d, 自然回撤-----自然回升 ,  自然回撤低点下面画红线
        if      (CurrentCol==NATURALDROP && Price[i]>Price[LatestNaturalDrop]+ Delta && Price[i]<(Price[LatestRiseTrend]) )
                {
                StringGrid1->Cells[N][i] = "4-b:"+AnsiString(Price[i])+ ">" +AnsiString(Price[LatestNaturalDrop])+"+"+AnsiString(Delta);
                NaturalDropRedUnderlinedPrice = Price[LatestNaturalDrop];
                NaturalDropRedUnderlined = LatestNaturalDrop;
                LatestNaturalRise       = i;
                CurrentCol              = NATURALRISE;
                Trend[i]=CurrentCol;
                ConvIndex               = NaturalDropToNaturalRise;
                StringGrid1->Cells[CurrentCol][i] = AnsiString(TrendConvSymbol[ConvIndex])+AnsiString(Price[i]);
                StringGrid1->Cells[NATURALDROP][NaturalDropRedUnderlined] = "_"+AnsiString(Price[NaturalDropRedUnderlined])+"_";
                continue;
                }

        //  4-c, 6-c , 下降趋势------自然回升 ,在下降趋势最低价下面画黑线
         if      (CurrentCol==DROPTREND && Price[i]>(Price[LatestDropTrend]+Delta))
                {
                StringGrid1->Cells[N][i] = "4-c,6-c:"+AnsiString(Price[i])+ ">" +AnsiString(Price[LatestDropTrend])+"+"+AnsiString(Delta);
                DropTrendBlackUnderlinedPrice= Price[LatestDropTrend];
                DropTrendBlackUnderlined= LatestDropTrend;
                LatestNaturalRise       = i;
                CurrentCol              = NATURALRISE;
                Trend[i]=CurrentCol;
                ConvIndex               = DropToNaturalRise;
                StringGrid1->Cells[CurrentCol][i] = AnsiString(TrendConvSymbol[ConvIndex])+AnsiString(Price[i]);
                StringGrid1->Cells[DROPTREND][DropTrendBlackUnderlined] = "_"+AnsiString(Price[DropTrendBlackUnderlined])+"_";
                continue;
                }

        //  4-d, 6-b, 自然回升 --------自然回撤 ,在自然回升最高价下面画黑线
        if      (CurrentCol==NATURALRISE && (Price[i]+Delta < Price[LatestNaturalRise]) && Price[i]> Price[LatestDropTrend])
                {
                StringGrid1->Cells[N][i] = "4-b:"+AnsiString(Price[i])+ "<" +AnsiString(Price[LatestNaturalRise])+"-"+AnsiString(Delta);
                NaturalRiseBlackUnderlinedPrice= Price[LatestNaturalRise];
                NaturalRiseBlackUnderlined= LatestNaturalRise;
                LatestNaturalDrop       = i;
                CurrentCol              = NATURALDROP;
                Trend[i]=CurrentCol;
                ConvIndex               = NaturalRiseToNaturalDrop;
                StringGrid1->Cells[CurrentCol][i] = AnsiString(TrendConvSymbol[ConvIndex])+AnsiString(Price[i]);
                StringGrid1->Cells[NATURALRISE][NaturalRiseBlackUnderlined] = "_"+AnsiString(Price[NaturalRiseBlackUnderlined])+"_";
                continue;
                }

        // 4-d 自然回升 --------下降趋势,在自然回升最高价下面画黑线
        if      (CurrentCol==NATURALRISE && (Price[i]+Delta < Price[LatestNaturalRise]) && Price[i]< Price[LatestDropTrend])
                {
                StringGrid1->Cells[N][i] = "4-d:"+AnsiString(Price[i])+ "<" +AnsiString(Price[LatestNaturalRise])+"-"+AnsiString(Delta);
                NaturalRiseBlackUnderlinedPrice=Price[LatestNaturalRise];
                NaturalRiseBlackUnderlined= LatestNaturalRise;
                LatestDropTrend         = i;
                CurrentCol              = DROPTREND;
                Trend[i]=CurrentCol;
                ConvIndex               = NaturalRiseToDrop;
                StringGrid1->Cells[CurrentCol][i] = AnsiString(TrendConvSymbol[ConvIndex])+AnsiString(Price[i]);
                StringGrid1->Cells[NATURALRISE][NaturalRiseBlackUnderlined] = "_"+AnsiString(Price[NaturalRiseBlackUnderlined])+"_";
                continue;
                }

        // 5-a 自然回升 --------上升趋势,09/05检查无误
        if      (CurrentCol==NATURALRISE && (Price[i]>  NaturalRiseBlackUnderlinedPrice+Delta/2))
                {
                StringGrid1->Cells[N][i] = "5-a:"+AnsiString(Price[i])+ ">" +AnsiString(NaturalRiseBlackUnderlinedPrice)+"+"+AnsiString(int(Delta/2));
                LatestRiseTrend         = i;
                CurrentCol              = RISETREND;
                Trend[i]=CurrentCol;
                ConvIndex               = NaturalRiseToRise;
                //StringGrid1->Cells[CurrentCol][i] = AnsiString(NaturalRiseBlackUnderlinedPrice)+"@"+AnsiString(TrendConvSymbol[ConvIndex])+AnsiString(Price[i]);
                StringGrid1->Cells[CurrentCol][i] = AnsiString(TrendConvSymbol[ConvIndex])+AnsiString(Price[i]);
                continue;
                }
        // 5-b 自然回撤-----下降趋势 ,09/05检查无误
        if      (CurrentCol==NATURALDROP && NaturalDropRedUnderlinedPrice>Price[i]+ Delta/2)
                {
                StringGrid1->Cells[N][i] = "5-b:"+AnsiString(Price[i])+"+"+AnsiString(int(Delta/2))+ "<" +AnsiString(NaturalDropRedUnderlinedPrice);
                LatestDropTrend         = i;
                CurrentCol              = DROPTREND;
                Trend[i]=CurrentCol;
                ConvIndex               = NaturalDropToDrop;
                //StringGrid1->Cells[CurrentCol][i] = AnsiString(NaturalDropRedUnderlinedPrice)+"$"+AnsiString(TrendConvSymbol[ConvIndex])+AnsiString(Price[i]);
                StringGrid1->Cells[CurrentCol][i] = AnsiString(TrendConvSymbol[ConvIndex])+AnsiString(Price[i]);
                continue;
                }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -