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

📄 xxx.~cpp

📁 Jesse Livermore 方法,和三线翻转方法
💻 ~CPP
字号:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "XXX.h"
#include "jesse.h"
#include "stdlib.h"



#define REF(X,n)  X[n]
typedef struct List
{
  float hi;
  float lo;
  TColor   color;
  int yyyy,mm,dd;
} TrilineList;
struct LList
{
 struct List item[3000];
 int count;
} trile ;

typedef TrilineList* Trilines;



void initialize();
void add(double,double,TColor,int,int,int);
int count();
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "CandleCh"
#pragma link "OHLChart"
#pragma link "BigCandl"
#pragma link "TeeSeriesTextEd"
//#pragma link "TeeURL"
#pragma resource "*.dfm"
TForm3 *Form3;
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
        : TForm(Owner)
		{
		}
//---------------------------------------------------------------------------


void __fastcall TForm3::FormActivate(TObject *Sender)
		{
                float x;

                Series1->Clear();
                //Series1->FillSampleValues(30);
                Chart1->Update();
                TDateTime t;
                t=TDateTime::CurrentDate();

                this->Caption = Form1->Caption;

		Triline( Form1->Price[0] );

                //因为蜡烛图控件是自己判断阴阳线的,所以不需要分辨颜色
                //故而将三线反转算法的高低价格拨乱反正
                for(int i=0;i<count();i++)
                {
                if(trile.item[i].color==clBlack)
                        {
                        x = trile.item[i].lo;
                        trile.item[i].lo=trile.item[i].hi;
                        trile.item[i].hi=x;
                        }
                }
		for(int i=0;i<count();i++)
		{
                //Series1->UpCloseColor=clWhite;
                //Series1->Pen->Color= trile.item[i].color;
                Series1->AddCandle(EncodeDate( trile.item[i].yyyy, trile.item[i].mm, trile.item[i].dd),
                                  trile.item[i].lo,
                                  trile.item[i].lo,
                                  trile.item[i].hi,
                                  trile.item[i].hi
                                   );
		}
		}
//---------------------------------------------------------------------------

void TForm3::Triline( double BASE )
		{
		initialize();
		for(int i=0;i<Form1->nill;i++)
		{
		/*一、绘制第一根线*/
		/*1。法则1如果今日收盘价高于基准价,从基准价到收盘价之间画红线*/
                if ( count()==0 )
                   {
		   if( Form1->Price[i]>BASE )
			  {
			  add(Form1->Price[i],BASE,clRed, Form1->YYYY[i], Form1->MM[i], Form1->DD[i]);
                          continue;
			  }
		/*2。法则2如果今日收盘价低于基准价,从基准价到收盘价之间画黑线*/
		   if( Form1->Price[i]<BASE )
			  {
			  add(BASE,Form1->Price[i],clBlack, Form1->YYYY[i], Form1->MM[i], Form1->DD[i]);
                          continue;
			  }
                    }
		/*3。法则3如果今日收盘价等于基准价,不画线*/
		/*二、绘制第二根线*/
		/*6。法则6如果今日收盘价在第一根线价格范围内,不画线*/
		/*4。法则4如果今日收盘价高于第一根线最高价,在先前高价到收盘价之间画红线*/
		if        ( count()==1)
			  {
			  if( Form1->Price[i] > trile.item[count()-1].hi )
				{
				add(Form1->Price[i], trile.item[count()-1].hi, clRed, Form1->YYYY[i], Form1->MM[i], Form1->DD[i]);
                                continue;
				}

		/*5。法则5如果今日收盘价低于第一根线最低价,从线前最低价到收盘价之间画黑线*/
			  if( Form1->Price[i] < trile.item[count()-1].lo )
				{
				add( trile.item[count()-1].lo,Form1->Price[i],  clBlack, Form1->YYYY[i], Form1->MM[i], Form1->DD[i]);
                                continue;
				}
                           }


		/*三、绘制第三根线*/
		/*9。法则9如果今日收盘价处于先前线形的价格范围之内,不画线*/
		/*7。法则7如果今日收盘价高于先前线形最高价,从先前线形最高价到收盘价之间画红线*/
		if        ( count()==2)
			  {
			  if( Form1->Price[i] > trile.item[count()-1].hi )
				{
				add(Form1->Price[i], trile.item[count()-1].hi, clRed, Form1->YYYY[i], Form1->MM[i], Form1->DD[i]);
                                continue;
				}
		/*8。法则8如果今日收盘价低于先前线形最低价,从先前线形最低价到收盘价之间画黑线*/
			  if( Form1->Price[i] < trile.item[count()-1].lo )
				{
				add(trile.item[count()-1].lo, Form1->Price[i], clBlack, Form1->YYYY[i], Form1->MM[i], Form1->DD[i]);
                                continue;
				}
			   }

		/*四、连续三红线,或者连续三根黑线之后的绘图方法*/
		/*10。法则10如果连续出现3根红线价格继续创新高,则继续从先前线形最高价到收盘价之间画红线*/
		if( count()>=3 && trile.item[count()-1].color==clRed && trile.item[count()-2].color==clRed && trile.item[count()-3].color==clRed )
			  {
			  if( Form1->Price[i] > trile.item[count()-1].hi)
				{
				add( Form1->Price[i], trile.item[count()-1].hi,  clRed, Form1->YYYY[i], Form1->MM[i], Form1->DD[i]);
                                continue;
				}
			  }
		/*11。连续3根红线之后,绘制黑线则必须价格低于前三根红线的最低价,
		//    从前一根红线的最低价到收盘价之间画黑线*/
		if( count()>=3 && trile.item[count()-1].color==clRed && trile.item[count()-2].color==clRed && trile.item[count()-3].color==clRed )
			  {
			  if(  Form1->Price[i] < trile.item[count()-3].lo )
				{
				add( trile.item[count()-1].lo,  Form1->Price[i], clBlack, Form1->YYYY[i], Form1->MM[i], Form1->DD[i]);
                                continue;
				}
			   }
		/*12。法则12如果连续出现3根黑线价格继续创新低,则继续从先前线形最低价到收盘价之间画黑线*/
		if( count()>=3 && trile.item[count()-1].color==clBlack && trile.item[count()-2].color==clBlack && trile.item[count()-3].color==clBlack )
			  {
			  if( Form1->Price[i] < trile.item[count()-1].lo )
				{
				add( trile.item[count()-1].lo,  Form1->Price[i], clBlack, Form1->YYYY[i], Form1->MM[i], Form1->DD[i]);
                                continue;
				}
			   }

		/*13。连续3根黑线之后,绘制红线则必须价格高于前三根黑线的最高价,
		//   从前一根黑线的最高价到收盘价之间画红线*/
		if( count()>=3 && trile.item[count()-1].color==clBlack && trile.item[count()-2].color==clBlack && trile.item[count()-3].color==clBlack )
			  {
			  if( Form1->Price[i] > trile.item[count()-3].hi )
				{
				add( Form1->Price[i],  trile.item[count()-1].hi, clRed, Form1->YYYY[i], Form1->MM[i], Form1->DD[i]);
                                continue;
				}
			   }

                //问题大约出现在这里,拉锯的情况遗漏了,以至于图表不能连续,修改如下,一切就好了
		if( count()>=3 && trile.item[count()-1].color==clRed && !(trile.item[count()-2].color==clRed && trile.item[count()-3].color==clRed ))
			  {
			  if( Form1->Price[i] > trile.item[count()-1].hi)
				{
				add( Form1->Price[i], trile.item[count()-1].hi,  clRed, Form1->YYYY[i], Form1->MM[i], Form1->DD[i]);
                                continue;
				}
			  if( Form1->Price[i] < trile.item[count()-1].lo)
				{
				add( trile.item[count()-1].lo, Form1->Price[i],  clBlack, Form1->YYYY[i], Form1->MM[i], Form1->DD[i]);
                                continue;
				}

			  }
                // 问题大约出现在这里,拉锯的情况遗漏了,以至于图表不能连续,修改如下,一切就好了
		if( count()>=3 && trile.item[count()-1].color==clBlack && !(trile.item[count()-2].color==clBlack && trile.item[count()-3].color==clBlack))
			  {
			  if( Form1->Price[i] < trile.item[count()-1].lo )
				{
				add( trile.item[count()-1].lo,  Form1->Price[i], clBlack, Form1->YYYY[i], Form1->MM[i], Form1->DD[i]);
                                continue;
				}
			  if( Form1->Price[i] > trile.item[count()-1].hi )
				{
				add(  Form1->Price[i], trile.item[count()-1].hi, clRed, Form1->YYYY[i], Form1->MM[i], Form1->DD[i]);
                                continue;
				}
			   }
		      }
		}


void initialize()
        {
        trile.count=0;
        }
void add(double hi, double lo,TColor color, int yyyy, int mm, int dd )
        {
        trile.item[trile.count].hi=hi;
        trile.item[trile.count].lo=lo;
        trile.item[trile.count].color=color;
        trile.item[trile.count].yyyy=yyyy;
        trile.item[trile.count].mm=mm;
        trile.item[trile.count].dd=dd;
        trile.count++;
        }
int  count()
        {
        return     trile.count;
        }
void __fastcall TForm3::Chart1MouseWheelDown(TObject *Sender,
      TShiftState Shift, TPoint &MousePos, bool &Handled)
{
//Series1->ZoomOut();
}
//---------------------------------------------------------------------------

void __fastcall TForm3::Chart1MouseWheelUp(TObject *Sender,
      TShiftState Shift, TPoint &MousePos, bool &Handled)
{
//Chart1->Zoom(1);
}
//---------------------------------------------------------------------------

⌨️ 快捷键说明

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