void OnStart();
void OnInit();
ID | 詳細 |
INIT_SUCCEEDED | 初期化成功。
EAのテストは継続可能です。 このコードはNULL(EAはテスターで正常に初期化された)と同じ値を意味します。 |
INIT_FAILED | 初期化は失敗しました。
致命的なエラーの為、テストを続けても意味がありません。 例えば、「EAの為に必要とされるインジケータを生成する事が出来ませんでした。」等のエラーが挙げられます。 この戻り値はゼロ以外の値(テスターはEA初期化に失敗しました)を意味します。 EAのパラメータに与えた設定では、テストは実行されません。 エージェントは新しいタスクを受けられます。 |
INIT_PARAMETERS_INCORRECT | この値は、入力パラメータに誤った値を設定をしている事を意味します。
この戻り値を含んでいる結果のメッセージ列は、最適化テーブルで赤く強調表示されます。 ストラテジーテスターは、この値を受けると再試行を行う為、他エージェントにタスクを渡しません。 |
INIT_AGENT_NOT_SUITABLE | 初期化中のエラーはありませんが、何らかの理由でエージェントが適切ではありません。
例えばメモリ不足等。 このコードが返された後、エージェントはこの最適化が終わるまでタスクを受け付けません。 |
void OnDeinit(const int reason);
void OnTick();
void OnTimer();
double OnTester();
void OnChartEvent( const int id, // イベントID const long& lparam, // long型イベント const double& dparam, // double型イベント const string& sparam // string型イベント );
イベントの種類 | 引数:id イベントID |
引数:lparam long型イベント |
引数:dparam double型イベント |
引数:sparam string型イベント |
キー押下 | CHARTEVENT_KEYDOWN | 押下されたキーの コード |
繰り返し押された回数 | キー状態の ビットマスク文字列 |
マウス操作 ※1 |
CHARTEVENT_MOUSE_MOVE | X座標 | Y座標 | マウスボタン状態の ビットマスク文字列 |
オブジェクト作成 ※2 |
CHARTEVENT_OBJECT_CREATE | - | - | 作成された オブジェクト名 |
オブジェクト プロパティ変更 |
CHARTEVENT_OBJECT_CHANGE | - | - | 変更された オブジェクト名 |
オブジェクト削除 ※3 |
CHARTEVENT_OBJECT_DELETE | - | - | 削除された オブジェクト名 |
チャート上での マウスクリック |
CHARTEVENT_CLICK | X座標 | Y座標 | - |
オブジェクトクリック | CHARTEVENT_OBJECT_CLICK | X座標 | Y座標 | クリックされた オブジェクト名 |
オブジェクト移動 (マウス操作) |
CHARTEVENT_OBJECT_DRAG | - | - | 移動された オブジェクト名 |
LabelEdit編集完了 | CHARTEVENT_OBJECT_ENDEDIT | - | - | LabelEdit オブジェクト名 |
チャート変更 | CHARTEVENT_CHART_CHANGE | - | - | - |
カスタムイベント | CHARTEVENT_CUSTOM+N (N範囲:0~65535) |
EventChartCustom() で設定した値 |
EventChartCustom() で設定した値 |
EventChartCustom() で設定した値 |
#define OBJNAME_TESTLINE "水平ラインオブジェクト" int OnInit() { // 水平ラインのオブジェクトを作成 ObjectCreate( OBJNAME_TESTLINE, OBJ_HLINE, 0 , Time[0] , Close[0]); ObjectSet( OBJNAME_TESTLINE, OBJPROP_COLOR, clrYellow); ObjectSet( OBJNAME_TESTLINE, OBJPROP_STYLE, STYLE_SOLID); ObjectSet( OBJNAME_TESTLINE, OBJPROP_WIDTH, 1); return(INIT_SUCCEEDED); } void OnChartEvent( const int id, // イベントID const long& lparam, // long型イベント const double& dparam, // double型イベント const string& sparam) // string型イベント { if ( id == CHARTEVENT_OBJECT_CLICK) { // オブジェクトがクリックされた if ( sparam == OBJNAME_TESTLINE ) { // "水平ラインオブジェクト"がクリックされた Print( OBJNAME_TESTLINE + "をクリック"); } } }
int OnCalculate ( const int rates_total, // 入力された時系列のバー数 const int prev_calculated, // 計算済み(前回呼び出し時)のバー数 const datetime& time[], // 時間 const double& open[], // 始値 const double& high[], // 高値 const double& low[], // 安値 const double& close[], // 終値 const long& tick_volume[], // Tick出来高 const long& volume[], // Real出来高 const int& spread[] // スプレッド );
#property strict #property indicator_chart_window // インジケータの表示ウインドウ:チャートウインドウ #property indicator_buffers 1 // インジケータバッファの数 #property indicator_label1 "25SMA" // インジケータ1のラベル #property indicator_type1 DRAW_LINE // インジケータ1の種類:線 #property indicator_color1 clrYellow // インジケータ1の色:黄色(web color) #property indicator_style1 STYLE_SOLID // インジケータ1の線タイプ:実線 #property indicator_width1 1 // インジケータ1の線の太さ:1 //--- インジケータバッファ配列の宣言 double SMA25_Buffer[1000]; //+------------------------------------------------------------------+ //| OnInit(初期化)イベント | //+------------------------------------------------------------------+ int OnInit() { //--- インジケータバッファ配列をインジケータ1に割り当て SetIndexBuffer( 0 , SMA25_Buffer ); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| OnCalculate(tick受信)イベント | //+------------------------------------------------------------------+ int OnCalculate( const int rates_total, // 入力された時系列のバー数 const int prev_calculated,// 計算済み(前回呼び出し時)のバー数 const datetime& time[], // 時間 const double& open[], // 始値 const double& high[], // 高値 const double& low[], // 安値 const double& close[], // 終値 const long& tick_volume[], // Tick出来高 const long& volume[], // Real出来高 const int& spread[]) // スプレッド { int bars; bars = Bars( Symbol() , 0); // 現在の通貨ペア・時間軸チャートに表示されているバー数を取得 Print("bars = " ,bars, // 現在チャートに表示されているバー数 ", rates_total = " ,rates_total, // 第1引数:現在バー数 ", prev_calculated = " ,prev_calculated); // 第2引数:計算済みバー数 Print( "time[0] = " ,time[0], // 最新のバーの時間 ",time[rates_total-1] = ",time[rates_total-1]); // 最も古いバーの時間 //--- インジケータバッファに単純移動平均(SMA)の値を設定 int icount , icount_end; icount_end = rates_total - prev_calculated; // 計算済みのインジケータは更新しない for ( icount = 0; icount <= icount_end; icount++ ) { if ( icount >= 1000 ) { break; } // 25SMAの取得データをインジケータバッファに代入 SMA25_Buffer[icount] = iMA( Symbol() , Period() , 25 , icount , MODE_SMA , PRICE_CLOSE , 0 ); } //--- 戻り値は次回OnCalculate()関数が呼ばれた時の第2引数(prev_calculated)になる。 return( rates_total ); }