//------------------------------------------------------------------------
// 綆縐? k_Bar
// 鍚嶇О: 璺ㄥ懆鏈熷嚱鏁?-鍩虹BAR鏁版嵁
// 綾誨埆: 鐢ㄦ埛鍑芥暟
// 綾誨瀷: 鐢ㄦ埛鍑芥暟
// 杈撳嚭: 鏁板煎瀷
//------------------------------------------------------------------------
Params
Numeric TimeFrame(1440);
// 鐩爣鏃墮棿鍛ㄦ湡錛氭寜鏈堢嚎=4鍛紙40320)錛屽懆綰?7澶?10080)錛屾棩綰?24灝忔椂錛?440錛?br /> // 鍏朵粬鏃ュ唴鐨勫懆鏈熺瓑浜庣浉搴旂殑鍒嗛挓鏁幫紝濡傦細1灝忔椂=60錛?nbsp;30鍒嗛挓=30銆傘傘?br /> // 1鍒嗛挓鍥捐〃錛屾敮鎸佷笉瑙勫垯鍒嗛挓鏁幫紝濡?鍒嗛挓銆?鍒嗛挓銆?4鍒嗛挓絳?/span>
Numeric BarsBack(0);
// 鐩爣鏃墮棿鍛ㄦ湡BAR鍋忕Щ錛?br /> // 1--琛ㄧず褰撳墠鍛ㄦ湡涓嬬殑褰撳墠BAR瀵瑰簲鐩爣鍛ㄦ湡鐨勫墠涓鏍笲AR
// 0--琛ㄧず褰撳墠鍛ㄦ湡涓嬬殑褰撳墠BAR瀵瑰簲鐩爣鍛ㄦ湡鐨勫綋鍓岯AR鎴鍒扮洰鍓嶄負姝㈢殑BAR鏁版嵁鍊?/span>
Vars
Numeric TradeDate; // 褰撳墠K綰垮疄闄呬氦鏄撴棩鏈燂紙涓昏瑙e喅澶滅洏闂錛?/span>
Numeric TradeHour; // 褰撳墠K綰垮疄闄呬氦鏄撴椂闂達紙灝忔椂錛?/span>
Numeric TradeMinute; // 褰撳墠K綰垮疄闄呬氦鏄撴椂闂達紙鍒嗛挓錛?/span>
NumericSeries Index; // 褰撳墠BAR鍦═imeFrame鏃墮棿鍛ㄦ湡涓嬬殑绱㈠紩鍊?/span>
Numeric SessionStartHour; // 褰撳墠K綰垮疄闄呯殑浜ゆ槗鏃ョ殑絎竴鑺備氦鏄撶殑璧峰鏃墮棿錛堝皬鏃訛級
NumericSeries barCnt; // 璇誨彇鐩爣鍛ㄦ湡涓婁竴鏍笲AR鐨勬暟鎹湪褰撳墠鍛ㄦ湡涓嬮渶瑕佸洖婧殑BAR鏁?/span>
NumericSeries Ht_CurBar; // 褰撳墠BAR鍦ㄧ洰鏍囧懆鏈熶笅瀵瑰簲鐨凜urrentBar
Numeric barCntSum; // 涓存椂鍙橀噺錛岃繑鍥炵洰鏍囧懆鏈熸暟鎹渶瑕佸洖婧殑BAR鏁?/span>
NumericSeries Ht_Open; // 鐩爣鏃墮棿鍛ㄦ湡鐨勫紑鐩樹環
NumericSeries Ht_High; // 鐩爣鏃墮棿鍛ㄦ湡鐨勬渶楂樹環
NumericSeries Ht_Low; // 鐩爣鏃墮棿鍛ㄦ湡鐨勬渶浣庝環
NumericSeries Ht_Close; // 鐩爣鏃墮棿鍛ㄦ湡鐨勬敹鐩樹環
NumericSeries Ht_Vol; // 鐩爣鏃墮棿鍛ㄦ湡鐨勬垚浜ら噺
NumericSeries Ht_OpenInt; // 鐩爣鏃墮棿鍛ㄦ湡鐨勬寔浠撻噺
bool condition(false); // 鍒ゆ柇鍦ㄧ洰鏍囨椂闂存槸鍚﹀睘浜庝笉鍚屾牴BAR
Numeric i;
Begin
TradeDate = TrueDate(0); // 鍙栧疄闄呬氦鏄撴棩鏈?br />
// 鏍規嵁TimeFrame鍒嗗埆澶勭悊
If(TimeFrame == 40320) // 鏈堢嚎
{
Index = (YearFromDateTime(TradeDate) - 1970) * 12 + MonthFromDateTime(TradeDate);
}
Else If(TimeFrame == 10080) // 鍛ㄧ嚎
{
Index = IntPart(DateDiff(19700105,TradeDate)/7);
}
Else If(TimeFrame == 1440) // 鏃ョ嚎
{
Index = DateDiff(19700105,TradeDate);
}
Else
{
TradeHour = HourFromDateTime(Time);
TradeMinute = MinuteFromDateTime(Time);
// 鍙栧綋鍓嶅搧縐嶏紝絎竴鑺備氦鏄撶殑寮濮嬪皬鏃舵暟
SessionStartHour = IntPart(GetSessionStartTime(0)*100);
// 瑙e喅4灝忔椂鍥劇殑鏃墮棿鍒掑垎姣旇緝鐗規畩闂
If(TimeFrame == 240) SessionStartHour = IIF(SessionStartHour == 21,20,8);
// 鎸夊綋鍓岯AR瀵瑰簲鏃墮棿錛岄櫎浠imeFrame鐨勫垎閽熸暟錛屽緱鍒扮殑鍟嗕負绱㈠紩鍊鹼紝绱㈠紩鍊肩浉鍚岀殑鍦ㄥぇ鍛ㄦ湡涓婂睘浜庡悓涓鏍笲AR
Index = DateDiff(19700105,TradeDate) * (IntPart(1439/TimeFrame)+1) + IntPart((IIF(TradeHour >= SessionStartHour, TradeHour - SessionStartHour,
TradeHour + 24 - SessionStartHour) * 60 + TradeMinute)/TimeFrame);
}
// 绱㈠紩鍊間笉鍚岀殑錛屽垯璇存槑灞炰簬涓嶅悓BAR
condition = Index <> Index[1];
If(CurrentBar==0) // 濡傛灉鏄涓鏍笲ar, Ht_CurBar=0
{
barCnt = 0;
Ht_CurBar = 0;
Ht_Open = Open;
Ht_High = High;
Ht_Low = Low;
Ht_Close = Close;
Ht_Vol = Vol;
Ht_OpenInt = OpenInt;
}
Else
{
If(Condition)
// 濡傛灉鍦ㄧ洰鏍囧懆鏈熶笅錛屽睘浜庡彟涓鏍筀綰匡紝鍒橦t_CurBar鍔?
{
barCnt = 1;
Ht_CurBar = Ht_CurBar[1] + 1;
Ht_Open = Open;
Ht_High = High;
Ht_Low = Low;
Ht_Vol = Vol;
}
Else
// 濡傛灉鍦ㄧ洰鏍囧懆鏈熶笅錛屽睘浜庡悓涓鏍筀綰匡紝鍒橦t_CurBar涓嶅彉錛屼絾鏈楂樹環鍜屾渶浣庝環瑕佽褰曚環鏍肩殑鍙樺寲錛屾垚浜ら噺瑕佺瘡鍔?/span>
{
barCnt = barCnt[1] + 1;
Ht_High = Max(Ht_High[1],High);
Ht_Low = Min(Ht_Low[1],Low);
Ht_Vol = Ht_Vol[1] + Vol;
}
// 鏀剁洏浠峰拰鎸佷粨閲忔繪槸鍙栨渶鏂板?/span>
Ht_Close = Close;
Ht_OpenInt = OpenInt;
}
// FileAppend("c:\\qqqq.txt","DT="+Text(Date+Time)+" Index="+Text(Index)+" CurrentBar="+Text(CurrentBar)+" barCnt="+text(barCnt)+" Ht_CurBar="+text(Ht_CurBar)+" Ht_Open="+text(Ht_Open)+" Ht_High="+text(Ht_High)
// +" Ht_Low="+Text(Ht_Low)+" Ht_Close="+Text(Ht_Close)+" Ht_Vol="+Text(Ht_Vol)+" Ht_OpenInt="+Text(Ht_OpenInt));
// 鍓嶉潰鍦ㄥ綋鍓嶅懆鏈熺殑姣忔牴BAR錛岃褰曚簡瀹冨搴旂殑鐩爣鏃墮棿鍛ㄦ湡鐨勫紑楂樹綆鏀剁瓑鏁版嵁銆?br /> // 鎺ヤ笅鏉ユ妸姣忔牴BAR瀵瑰簲鐨勬暟鎹繑鍥炵粰璋冪敤鏈嚱鏁扮殑鍏紡錛堥氳繃鍏ㄥ眬鍙橀噺錛?/span>
barCntSum = barCnt ;
If(BarsBack == 0)
// 濡傛灉BarsBack涓?錛屽垯褰撳墠BAR璁板綍鐨勬槸褰撳墠BAR鎵瀵瑰簲鐩爣鍛ㄦ湡鐨勫綋鍓岯AR鎴鍒扮洰鍓嶄負姝㈢殑BAR鏁版嵁鍊?/span>
{
barCntSum = 0 ;
}
// 濡傛灉BarsBack涓?錛屽垯褰撳墠BAR璁板綍鐨勬槸褰撳墠BAR鎵瀵瑰簲鐩爣鍛ㄦ湡鐨勫墠涓鏍笲AR鐨勬暟鎹?/span>
Else
{
barCntSum = barCnt ;
}
// 灝嗙洰鏍囨椂闂村懆鏈熶笅鐨凚AR鏁版嵁鍐欏叆鍏ㄥ眬鍙橀噺榪斿洖璋冪敤鍏紡
SetGlobalVar2("Ht_curbar",Ht_CurBar);
SetGlobalVar2("Ht_open",Ht_Open[barCntSum]);
SetGlobalVar2("Ht_high",Ht_High[barCntSum]);
SetGlobalVar2("Ht_low",Ht_Low[barCntSum]);
SetGlobalVar2("Ht_close",Ht_Close[barCntSum]);
SetGlobalVar2("Ht_vol",Ht_Vol[barCntSum]);
SetGlobalVar2("Ht_openInt",Ht_OpenInt[barCntSum]);
// 灝嗚鍙栧ぇ鍛ㄦ湡鏁版嵁鐨勫洖婧疊AR鏁頒綔涓哄嚱鏁扮殑榪斿洖鍊艱繑鍥?/span>
Return barCnt;
End
/*
Params
Numeric TimeFrame(1440);
// 鐩爣鏃墮棿鍛ㄦ湡錛氭寜鏈堢嚎=4鍛紙40320)錛屽懆綰?7澶?10080)錛屾棩綰?24灝忔椂錛?440錛?br /> // 鍏朵粬鏃ュ唴鐨勫懆鏈熺瓑浜庣浉搴旂殑鍒嗛挓鏁幫紝濡傦細1灝忔椂=60錛?nbsp;30鍒嗛挓=30銆傘傘?br /> // 1鍒嗛挓鍥捐〃錛屾敮鎸佷笉瑙勫垯鍒嗛挓鏁幫紝濡?鍒嗛挓銆?鍒嗛挓銆?4鍒嗛挓絳?br />
Numeric BarsBack(0);
// 鐩爣鏃墮棿鍛ㄦ湡BAR鍋忕Щ錛?br /> // 1--琛ㄧず褰撳墠鍛ㄦ湡涓嬬殑褰撳墠BAR瀵瑰簲鐩爣鍛ㄦ湡鐨勫墠涓鏍笲AR
// 0--琛ㄧず褰撳墠鍛ㄦ湡涓嬬殑褰撳墠BAR瀵瑰簲鐩爣鍛ㄦ湡鐨勫綋鍓岯AR鎴鍒扮洰鍓嶄負姝㈢殑BAR鏁版嵁鍊?br />
Vars
Numeric TradeDate; // 褰撳墠K綰垮疄闄呬氦鏄撴棩鏈燂紙涓昏瑙e喅澶滅洏闂錛?br /> Numeric TradeHour; // 褰撳墠K綰垮疄闄呬氦鏄撴椂闂達紙灝忔椂錛?br /> Numeric TradeMinute; // 褰撳墠K綰垮疄闄呬氦鏄撴椂闂達紙鍒嗛挓錛?br /> NumericSeries Index; // 褰撳墠BAR鍦═imeFrame鏃墮棿鍛ㄦ湡涓嬬殑绱㈠紩鍊?br /> Numeric SessionStartHour; // 褰撳墠K綰垮疄闄呯殑浜ゆ槗鏃ョ殑絎竴鑺備氦鏄撶殑璧峰鏃墮棿錛堝皬鏃訛級
NumericSeries barCnt; // 璇誨彇鐩爣鍛ㄦ湡涓婁竴鏍笲AR鐨勬暟鎹湪褰撳墠鍛ㄦ湡涓嬮渶瑕佸洖婧殑BAR鏁?br /> NumericSeries Ht_CurBar; // 褰撳墠BAR鍦ㄧ洰鏍囧懆鏈熶笅瀵瑰簲鐨凜urrentBar
Numeric barCntSum; // 涓存椂鍙橀噺錛岃繑鍥炵洰鏍囧懆鏈熸暟鎹渶瑕佸洖婧殑BAR鏁?br /> NumericSeries Ht_Open; // 鐩爣鏃墮棿鍛ㄦ湡鐨勫紑鐩樹環
NumericSeries Ht_High; // 鐩爣鏃墮棿鍛ㄦ湡鐨勬渶楂樹環
NumericSeries Ht_Low; // 鐩爣鏃墮棿鍛ㄦ湡鐨勬渶浣庝環
NumericSeries Ht_Close; // 鐩爣鏃墮棿鍛ㄦ湡鐨勬敹鐩樹環
NumericSeries Ht_Vol; // 鐩爣鏃墮棿鍛ㄦ湡鐨勬垚浜ら噺
NumericSeries Ht_OpenInt; // 鐩爣鏃墮棿鍛ㄦ湡鐨勬寔浠撻噺
bool condition(false); // 鍒ゆ柇鍦ㄧ洰鏍囨椂闂存槸鍚﹀睘浜庝笉鍚屾牴BAR
Numeric i;
Begin
TradeDate = TrueDate(0); // 鍙栧疄闄呬氦鏄撴棩鏈?br />
// 鏍規嵁TimeFrame鍒嗗埆澶勭悊
If(TimeFrame == 40320) // 鏈堢嚎
{
Index = (YearFromDateTime(TradeDate) - 1970) * 12 + MonthFromDateTime(TradeDate);
}
Else If(TimeFrame == 10080) // 鍛ㄧ嚎
{
Index = IntPart(DateDiff(19700105,TradeDate)/7);
}
Else If(TimeFrame == 1440) // 鏃ョ嚎
{
Index = DateDiff(19700105,TradeDate);
}
Else
{
TradeHour = HourFromDateTime(Time);
TradeMinute = MinuteFromDateTime(Time);
// 鍙栧綋鍓嶅搧縐嶏紝絎竴鑺備氦鏄撶殑寮濮嬪皬鏃舵暟
SessionStartHour = IntPart(GetSessionStartTime(0)*100);
// 鎸夊綋鍓岯AR瀵瑰簲鏃墮棿錛岄櫎浠imeFrame鐨勫垎閽熸暟錛屽緱鍒扮殑鍟嗕負绱㈠紩鍊鹼紝绱㈠紩鍊肩浉鍚岀殑鍦ㄥぇ鍛ㄦ湡涓婂睘浜庡悓涓鏍笲AR
Index = DateDiff(19700105,TradeDate) * (IntPart(1440/TimeFrame)+1) + IntPart((IIF(TradeHour >= SessionStartHour, TradeHour - SessionStartHour,TradeHour + 24 - SessionStartHour) * 60 + TradeMinute)/TimeFrame);
}
// 绱㈠紩鍊間笉鍚岀殑錛屽垯璇存槑灞炰簬涓嶅悓BAR
condition = Index <> Index[1];
If(CurrentBar==0) // 濡傛灉鏄涓鏍笲ar, Ht_CurBar=0
{
barCnt = InvalidNumeric;
Ht_CurBar = InvalidNumeric;
Ht_Open = InvalidNumeric;
Ht_High = InvalidNumeric;
Ht_Low = InvalidNumeric;
Ht_Close = InvalidNumeric;
Ht_Vol = InvalidNumeric;
Ht_OpenInt = InvalidNumeric;
}
Else
{
If(Condition)
// 濡傛灉鍦ㄧ洰鏍囧懆鏈熶笅錛屽睘浜庡彟涓鏍筀綰匡紝鍒橦t_CurBar鍔?
{
If(Ht_CurBar[1] == InvalidNumeric)
{
Ht_CurBar = 0;
}
Else
{
Ht_CurBar = Ht_CurBar[1] + 1;
}
barCnt = 1;
Ht_Open = Open;
Ht_High = High;
Ht_Low = Low;
Ht_Vol = Vol;
}
Else
// 濡傛灉鍦ㄧ洰鏍囧懆鏈熶笅錛屽睘浜庡悓涓鏍筀綰匡紝鍒橦t_CurBar涓嶅彉錛屼絾鏈楂樹環鍜屾渶浣庝環瑕佽褰曚環鏍肩殑鍙樺寲錛屾垚浜ら噺瑕佺瘡鍔?br /> {
If(Ht_CurBar[1] <> InvalidNumeric)
{
barCnt = barCnt[1] + 1;
Ht_High = Max(Ht_High[1],High);
Ht_Low = Min(Ht_Low[1],Low);
Ht_Vol = Ht_Vol[1] + Vol;
}
}
// 鏀剁洏浠峰拰鎸佷粨閲忔繪槸鍙栨渶鏂板?br /> If(Ht_CurBar <> InvalidNumeric)
{
Ht_Close = Close;
Ht_OpenInt = OpenInt;
}
}
//Commentary("barCnt = "+Text(barCnt));
//Commentary("Ht_CurBar="+text(Ht_CurBar));
//FileAppend("c:\\qqqq.txt","DT="+Text(Date+Time)+" Index="+Text(Index)+" CurrentBar="+Text(CurrentBar)+" barCnt="+text(barCnt)+" Ht_CurBar="+text(Ht_CurBar)+" Ht_Open="+text(Ht_Open)+" Ht_High="+text(Ht_High)
//+" Ht_Low="+Text(Ht_Low)+" Ht_Close="+Text(Ht_Close)+" Ht_Vol="+Text(Ht_Vol)+" Ht_OpenInt="+Text(Ht_OpenInt));
// 鍓嶉潰鍦ㄥ綋鍓嶅懆鏈熺殑姣忔牴BAR錛岃褰曚簡瀹冨搴旂殑鐩爣鏃墮棿鍛ㄦ湡鐨勫紑楂樹綆鏀剁瓑鏁版嵁銆?br /> // 鎺ヤ笅鏉ユ妸姣忔牴BAR瀵瑰簲鐨勬暟鎹繑鍥炵粰璋冪敤鏈嚱鏁扮殑鍏紡錛堥氳繃鍏ㄥ眬鍙橀噺錛?br /> barCntSum = barCnt ;
If(BarsBack == 0)
// 濡傛灉BarsBack涓?錛屽垯褰撳墠BAR璁板綍鐨勬槸褰撳墠BAR鎵瀵瑰簲鐩爣鍛ㄦ湡鐨勫綋鍓岯AR鎴鍒扮洰鍓嶄負姝㈢殑BAR鏁版嵁鍊?br /> {
barCntSum = 0 ;
}
// 濡傛灉BarsBack涓?錛屽垯褰撳墠BAR璁板綍鐨勬槸褰撳墠BAR鎵瀵瑰簲鐩爣鍛ㄦ湡鐨勫墠涓鏍笲AR鐨勬暟鎹?br /> Else
{
barCntSum = barCnt ;
}
// 灝嗙洰鏍囨椂闂村懆鏈熶笅鐨凚AR鏁版嵁鍐欏叆鍏ㄥ眬鍙橀噺榪斿洖璋冪敤鍏紡
SetGlobalVar2("Ht_curbar",Ht_CurBar);
SetGlobalVar2("Ht_open",Ht_Open[barCntSum]);
SetGlobalVar2("Ht_high",Ht_High[barCntSum]);
SetGlobalVar2("Ht_low",Ht_Low[barCntSum]);
SetGlobalVar2("Ht_close",Ht_Close[barCntSum]);
SetGlobalVar2("Ht_vol",Ht_Vol[barCntSum]);
SetGlobalVar2("Ht_openInt",Ht_OpenInt[barCntSum]);
// 灝嗚鍙栧ぇ鍛ㄦ湡鏁版嵁鐨勫洖婧疊AR鏁頒綔涓哄嚱鏁扮殑榪斿洖鍊艱繑鍥?br /> Return barCnt;
End
*/

]]>