sl = fabs(OrderOpenPrice()-OrderStopLoss())/_Point;// ПРИСВОИЛ ЗНАЧЕНИЕ КАК СОВЕТОВАЛИ//sl= NormalizeDouble(sl,Digits());// НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ СТОП ЛОССА ДЛЯ ОТКРЫТИЯ СДЕЛКИ ТО ЧТО БЫЛО ЗАКОМЕНТИРОВАЛ
voidOnTick()
{
//---if(tip_sl==en_po_atr)
{ //ЕСЛИ ТИП СТОП ЛОССА СТОИТ ПО АТР ТО ВЫСЧИТЫВАЕМ ЕГО ИЗ АТР
sl= iATR( NULL,PeriodForWork_sl,atr_sl_period,1)/Point;// ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССАPrint("СТОП ПО АТР, ЕГО РАЗМЕР "+sl);
}
else//ИНАЧЕ- ТО ЕСТЬ ЕСЛИ СТОП ЛОСС ФИКСИРОВАННЫЙ В ПУНКТАХ
{
sl= razmer_fikc_sl; // ПЕЕРМЕННОЙ СТОП ЛОССА ПРИСВАЕВАЕМ ФИКСИРОВАНОНЕ ЗНАЧЕНИЕ ПУНКТОВ И ДОМНОЖАЕМ НА ПОИНТPrint("СТОП ПО АТР, ЕГО РАЗМЕР "+sl);
}
double lot =MathFloor((Free*MaxRisk/100)/(sl*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА
コードでアドバイスいただいたようにしました。コードの冒頭で、ストップの種類(atpかfixedか)を選択する条件を持っています。
そして、正規化をコメントアウトして、このように設定しました。
利益計算はコードの次です。 そこは問題なく、利益計算の後に、アドバイスされた怖い計算式を追加しました。
すべてエラーなくコンパイルされた。しかし、テストを実行するとログにエラーが表示され、私が理解する限りではゼロによる除算であり、テストは停止しています。どこで失敗したのか、何がいけなかったのか。
削除すればいい。
コードでアドバイスいただいたようにしました。コードの冒頭で、ストップの種類(atpかfixedか)を選択する条件を持っています。
そして、正規化をコメントアウトして、このように設定しました。
利益計算はコードの次です。 そこは問題なく、利益計算の後に、アドバイスされた怖い計算式を追加しました。
すべてエラーなくコンパイルされた。しかし、テストを実行すると、ログにエラーが表示され、ゼロによる除算が行われ、テストが停止してしまいます。どこで失敗したのか、何がいけなかったのか。
ただ、2つの異なる選択肢を与えられたとき、両方を一度に適用してはいけないのです。
slを2種類の選択肢としてカウントしているのでしょうか
または
プライスバリューの価値を知ることができる。そして、数式は・・・から・・・までのポイントを含んでいる必要があります。
つまり、価格から離れた位置でのストップは、iATR(......)/_Point または razmer_fikc_sl のどちらかになりますが、関数内で2つの異なる値を使うのはあまり便利ではないので、1つのバリエーションだけにしたほうがよいでしょう。
また、slはロットサイズを計算する前に計算する必要があることを忘れてはいけません。
そうしてください...
削除すればいい。
行を修正したら、テストが開始されました。ただ、iATRからストップロスを変数に取得する際に、なぜ最後のポイントで割るのかが理解できませんでした。P/S 私は数学で本当に困っている、私はふざけていない :-( しかし、私はテストがうまく行き、100ロットで最小値を入れて、10000ロットでずっと違うので、うまくいくと思います... 助けてくれて本当にありがとうございました...
文字列を修正し、テストが開始されました。ただ、iATRからストップロスを変数に取得する際に、なぜ最後のポイントで割るのかが理解できませんでした。P/S 数学が苦手で、ふざけているわけではありません :-( でも、テストはうまくいったし、100デポではロットは最小限、10000デポではずっと違うので、大丈夫だと思います... いつもありがとうございます...。
ATRは0.00120のような10進数で表示されます。
razmer_fikc_sl は整数である。
ロットを計算するためには、ポイント、つまり整数値が必要です
ATR/Pointは整数になります。
古い話題ですが、解決策が見つかりません。時間帯を指定し(例えば12:00から14:00まで)、その時間帯に一度だけ、ある条件(例えばRSI<30)を満たす注文を出す方法です。
第一条件 - 時間が来た
第二条件 - rsi
第三条件 - 間隔のある始値で履歴にそのような注文はない。
こんにちは。
エリオット波動オシレーターという指標があり、変数EWOの数値が表示されます。EWOには、ゼロを超える正のEWOと、ゼロを下回る負のEWOがあります。
EWOの過去100回の測定値から、正のEWOの平均値と負のEWOの平均値を別々に計算する必要があります。
インジケータから値を取得します double EWO=iCustom(Symbol(),0, "Elliott Wave Oscillator",0,0);
どのmql4コードがEAにこれを実装できるのか、アドバイスをお願いします。
なんとかモジュロ平均を見つけることができました。
double avarage_EWO = 0;
for(int g=0;g<100;g++)
avarage_EWO = avarage_EWO +MathAbs( iCustom(Symbol(),0, "Elliott Wave Oscillator",0,g) ); // modulo average
avarage_EWO = avarage_EWO/100.0; // avarage_EWO = avarage_EWO/100.0; // double avarage_EVO = 0;g<100,g++) avarage_EWO = avarage_EWO = 0;g<100,g++)
しかし、平均プラスEWOと平均マイナスEWOを別々に計算するにはどうしたらよいのでしょうか?
ありがとうございました。
テイクプロフィットが 発動した結果、注文が行われる
ORDER_REASON_TPが どのように、何のためにあるのかがわからないのです。
DEAL_REASON_TPの 動作はわかるが、ここでの注文がどうなっているのかがわからない