double AO1 = iAO(Symbol(), signal_period, 1);
double AO2 = iAO(Symbol(), signal_period, 2);
double AO3 = iAO(Symbol(), signal_period, 3);
// Расчет переменных для доливки 2-а пикаif (AO3 < 0 && AO3 > AO2 && AO2<0 && AO2 < AO1 && AO1 < 0 && fl1==false && fl2==false) {a1 = AO2; fl1=true;Time_Figure1=Time[0]; Print ("Oбразование первого пика",DoubleToStr(a1, 6),"Время: ",Time_Figure1);}// определение наличия 1-го пика, флаг установленPrint ("Образование первого пика",DoubleToStr(a1, 6),"Время1: ",Time_Figure1);
if (Time_Figure1<Time[0] && Time_Figure1!=0) // условие наличия первого пика...
{
if (AO3<0 && AO3>AO2 && AO2<0 && AO2<AO1 && AO1<0 && fl1==true && fl2==false ) // определение наличия 2-го пика, флаги установлены
{
a11 = AO2; fl1=true; fl2=true; Time_Figure2=Time[0]; Print ("Образование второго пика", DoubleToStr (a11,6), "Время2: ",Time_Figure2);
if (a1<a11 && High [0] > High [1])
{ signal_buy = true; a1=a11; fl1=true;fl2=false; Time_Figure1=Time[0];} // активируем бай и устанавливаем сигнал на бай и записываем параметры как первого пика else { a1=a11; fl1=true;fl2=false;Time_Figure1=Time[0];} // просто запоминаем новый минимум - "первый" сигнал
}
}
if (AO2>0 || High [0] < High [1]) {fl1=false; fl2=false; Time_Figure1=0;}// если какой - либо столбец гистограммы пересекает 0-ю линию между сигналами 2-а пика// то сигнал считается недействительным. Cбрасываем флаги 1-го и 2-го пика вниз,if (Mas_Tip[0]!=0 && signal_buy == true ) return(10); // при доливке и сигнале к покупке открываемся с рынка
signal_buy = false; // сбрасываем сигнал к покупке
いや、彼女は誰にも借りがないんだ。デモ・リアルとテスターは違うんです。例えば、OrderSend()のパラメータが全て正しい場合、テスターは注文を開始する際に決してエラーを表示しません。しかし、トレードサーバーは逆にそうなる。
そのため、テスターの後でプログラムを修正し、デモで実行することで、テスターでは発生しないような例外的な状況にも適切に対応できるようにするのです。
これは私にとって非常に有益な情報です))
Time[x]バータイムを使用します。
なぜなら、同じバーの次の行で、この最初に形成された図形は、2番目の図形としても開始されるからです...。そして、それらを分離する必要があるのですが...。別
で、安値(ロング)と高値(ショート)を比較する...。
テンプレートを書くのが難しくなければ、まだ考えがまとまっていない)
ご清聴ありがとうございました。
なぜなら、同じバーの次の行で、この最初に形成された図形は、2番目の図形としても開始されるからです...。そして、それらを分離する必要があるのですが...。別
その後の安値(ロング)と高値(ショート)の比較のために...
そうではありません。AOの最初のシグナルバーがあれば、そこから、履歴の奥にある他のシグナルバーを探します。ポジションを開くときは、バーが開いた時間を覚えておき、二度と開けないようにします。次のAOバーが形成されたら、すぐにまたパターンを探し始めます。
詳しく教えてください - 歴史を深く探る必要はないのですが...。
ピークが来たかどうか、つまりFig.1だと判断し、図のようにいくつかのバーの後に別のピークが来たら、それを比較して判断すればいいのですから......。
問題は、1つ目の図と2つ目の図のスパイクが両方とも同じで、(フラグを使って別の図と区別することさえ)できないことです...。私は鈍い......なんだ?
追伸:スパイクは必ずしも1本ずつついているわけではなく、いくつかの等しいバーを通っているなど、異なる場合があります。
主なものは、さらに比較するために、一方を分離することです。
Time[x]バータイムを使用します。
一般にEAは、いくつかのコマンドを実行した後、次のバーが形成される前に、コードのある時点で中断することが可能です。
一般にEAは、あるコマンドを実行した後、次のバーが形成される前に、コードのある場所で割り込むことが可能です。
eddy:
これをiLowest関数に正しく置き換えるにはどうしたらよいでしょうか。
minimum=Low[iLowest (NULL, 0, MODE_LOW,KPeriod, 0)] - これでよいのでしょうか?
はい、そうです。Time[0]の現在値を静的変数に格納し、新しいティックごとに比較するのです。変化していなければ、return(0)で終了します。もし、変わっていれば、新しいバーを扱っていることになります。新しいバーの時間、つまりTime[0]を覚えておいて、独自の計算を始めてください。
ずっと前から知っていたのですが...。:-))もっと教科書から...ありがとうございます...
今比較してみると、正しい方向に進んでいると思うのですが、今のところ思うようにいきません......。
あなたは正しく私にTime[x]の使用を提案しました - 実装しようとしている...