📄 jesse.cpp
字号:
//---------------------------------------------------------------------------
#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 + -