イベント関数の動作と順番はこのような感じです。
int OnInit()
イベント起動時に一度だけ動作
void OnTick()
ティックの配信を受け取ると動作
double OnTester()
テスト、最適化でOnDeinit()直前に動作
戻り値はテストの時は操作履歴に表示
最適化の時は最適化結果に表示
void OnDeinit(const int reason)
終了時に一度動作
月単位で何カ月に1回マイナス月が出るかを出力してみます。
double Profit[2100][13];
double OnTester()
{
int StartYYY=2100,EndYYY=0;
for(int i=OrdersHistoryTotal()-1;i>=0;i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
int YYY=TimeYear(OrderOpenTime());
int MMM=TimeMonth(OrderOpenTime());
if(YYY<StartYYY)StartYYY=YYY;
if(YYY>EndYYY)EndYYY=YYY;
Profit[YYY][MMM]+=OrderProfit();
}
double cWIN=0,cLOSS=0;
for(int i=StartYYY;i<=EndYYY;i++)
{
for(int j=1;j<=12;j++)
{
if(Profit[i][j]>0)cWIN++;
if(Profit[i][j]<0)cLOSS++;
}
}
return ((cWIN+cLOSS)/cLOSS);
}
0 件のコメント:
コメントを投稿