#property strict#property script_show_inputs//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
long chart_ID=0; // ID графикаstring name="TrendLine"; // имя линииint sub_window=0; // номер подокна//--- сбросим значение ошибкиResetLastError();
//--- создадим трендовую линию по заданным координатамif(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,Time[41],1.0656,Time[65],1.0494))
{
Print(__FUNCTION__,
": не удалось создать линию тренда! Код ошибки = ",GetLastError());
return;
}
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+//| Создает линию тренда по заданным координатам |//+------------------------------------------------------------------+bool TrendCreate(constlong chart_ID=0, // ID графика
.
.
.
//--- включим (true) или отключим (false) режим продолжения отображения линии влевоObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправоObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
.
.
.
long chart_ID=0; // ID графикаstring name="TrendLine"; // имя линииint sub_window=0; // номер подокнаObjectDelete(chart_ID,name);
//--- сбросим значение ошибкиResetLastError();
//--- создадим трендовую линию по заданным координатамif(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,Time[minbar],Low[minbar],Time[IPMIN],Low[IPMIN]))
{
Print(__FUNCTION__,
": не удалось создать линию тренда! Код ошибки = ",GetLastError());
return(0);
}
ObjectSet("TrendLine",OBJPROP_TIME1,Time[minbar]);
ObjectSet("TrendLine",OBJPROP_PRICE1,Low[minbar]);
ObjectSet("TrendLine",OBJPROP_TIME2,Time[IPMIN]);
ObjectSet("TrendLine",OBJPROP_PRICE2,Low[IPMIN]);
if (IPMIN!=0){ double uroven= ObjectGetValueByTime(chart_ID,name,Time[1],sub_window);}
}
Print("uroven=",uroven);
if (Time[0] > b && Close[1] < uroven){Opn_B=true;}
ポイントの日時がわかっている場合は、bool TrendCreate()を呼び出すだけでよい。
アドバイスありがとうございました。それよりも、もっと簡単なことがわかった。
私はこのようにしました。
追伸:ひとつ理解できないのは、例の数字がなぜあのように選ばれているのかということです。
そこからトレンドラインはレンジの真ん中あたりを通る。
...
それらから、トレンドラインをレンジの真ん中あたりに置く。
さて、次に解決すべき問題は、線を右に続けて、EAで線の値を得るにはどうしたらいいかということです。
スクリプトコードには、そのすべてが詰まっています。
スクリプトコードには、そのすべてが詰まっています。
1.テスターから呼び出されると、トレードが開始されます。最適化を実行すると、いたるところにゼロがある。最適化の実行を開始すると、そこに案件が発生するのです。どうすればいいのか?
2.取引が発生した場合(各取引で)、行を保存し、発生しなかった場合は削除するようにするにはどうすればよいですか?
トレードは自分自身でコントロールする必要があります。しかし、各取引に独自の行を持たせるためには、行を作成する際にそれぞれの行に固有の名前を付ける必要があります。
どうやって?例を挙げてみましょうか。
テスト中のグラフィックオブジェクト
可視化テストでは、Expert Advisorは実際のチャートと対話します。通常のテストでは、視覚化せずに、Expert Advisor はレンダリングされない「仮想」チャートで動作します。この場合、いくつかの微妙な違いが生じる可能性があります。 テスターが最適化モードの場合、グラフィカルオブジェクトは サポートされません。
2日間の勉強で、最適化を実行するのは不可能だと判明。
インジケータを作るとどうだろう。Expert Advisorのライン値をこれを通して取得することはできますか?
誰が何を言わなければならないのか?もしかしたら、この問いをすでに研究している人がいるかもしれない。
...
インジケータを作れないかなぁ?それを通してEA内のラインの値を取得することができるでしょうか?
...
インジケータがグラフィカルオブジェクトを作成 し、そのパラメータを取得する場合、いいえ。
しかし、やはりインジケーターを使うことで全てを解決するのは簡単です。演算はインジケーター内で行われ、その結果はインジケーターバッファーを介して表示されます。
もうひとつの選択肢がある。行の代わりに行のパラメータでグローバル変数を作成しますが、その後、関数GetValueByShift()が動作しません、あなたはそのアナログを記述する必要があります。