MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1331

 
Aleksei Stepanenko:
すみません、こちらの会話に夢中になってしまい、気がつきませんでした...。

共通のテーマで、あなたのコードはいつも面白い...。

取ってつけたよう)

 
Iurii Tokman:
MakarFX

.

 
Iurii Tokman:

技術的な課題は、ウクライナ語の方がよく理解できる

私はまだそのレベルに達していません、私の母国語はロシア語です :)

...しかし、私はカジュアルなレベルでそれを理解しています。
 
Aleksei Stepanenko:

私はまだそのレベルには達していません、私の第一言語はロシア語です :)

私はソ連出身です。二つの母国語を持っています)
 
MakarFX:
私はソ連出身です。二つの母国語を持っています)
.
 
MakarFX:
私はソ連出身です。二つの母国語を持っています)

で、3人、まだスルジークです。

 
DanilaMactep:

私は数学が苦手なのですが、注文のオープンからストップまでの距離をコードでどのように計算すれば、slをこのコードに置き換えることができるのでしょうか?

ロット値を次のように正規化する

つまり、建値からストップまでの距離をコードでどのように計算するかということが残っているのですね。

建値と 逆指値の差の絶対値を価格ステップで割る必要があります。

  int sl = fabs(OrderOpenPrice()-OrderStopLoss())/_Point;

そして、この値slは数式に入ります。

ATRインジケータで計算したストップを置くことを考えると、十分に

double lot =MathFloor((Free*MaxRisk/100)/(sl/_Point*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА
そして、これはすでに正規化されたロットサイズになります。
 
MakarFX:

買い付け開始価格

ストップロスを買う

ひろがり

これで理解できたので、あとは買値と売値にどの値を割り当てるかを理解するだけです。

OrderSend(Symbol(),OP_BUY,lot,Ask,slippages,Bid-sl,Bid+tp ,"ДИВЕРГЕНЦИЯ НА БАЙ АО"); // ОТКРЫВАЕМ БАЙ ОРДЕР

OrderSend(Symbol(),OP_SELL,lot,Bid,slippages,Ask+sl,Ask-tp ,"ДИВЕРГЕНЦИЯ НА СЕЛ АО"); // ОТКРКЫВВАЕМ СЕЛ ОРДЕР

言い換えれば、私は買い建値にAskを割り当て、売り建値にFを割り当て、私はBidを割り当てるのですか?

 
DanilaMactep:

コードでは、次のように注文を開いています。

買い建値にAskを、売り建値にBidを変数に代入するということでしょうか。

OrderSend(Symbol(),OP_BUY,lot,Ask,slippages,Bid-sl,Bid+tp ,"ДИВЕРГЕНЦИЯ НА БАЙ АО"); // ОТКРЫВАЕМ БАЙ ОРДЕР

この機能から判断すると、すでにストップロスを知っているようですが・・・何が問題なのか理解できません。

 
Alexey Viktorov:

値と終値の 差の絶対値を価格ステップで割る。

で、このsl値が数式に入ります。

ATRインジケータで計算したストップを置くことを考えると、十分に

そして、それが正規化されたロットサイズとなるのです。

アドバイスいただいた通り、コードでやってみました。コードの最初に、ストップの種類(atpまたはfixed)を選択する条件を設けています。

if(tip_sl==en_po_atr)
     { //ЕСЛИ ТИП СТОП ЛОССА СТОИТ ПО АТР ТО ВЫСЧИТЫВАЕМ ЕГО ИЗ АТР
     //Print("СТОП ПО АТР, ЕГО РАЗМЕР ");
     sl= iATR( NULL,PeriodForWork_sl,atr_sl_period,1);// ПОЛУЧЕНИЕ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
      Print("СТОП ПО АТР, ЕГО РАЗМЕР "+sl);
     }
     else //ИНАЧЕ- ТО ЕСТЬ ЕСЛИ СТОП ЛОСС ФИКСИРОВАННЫЙ В ПУНКТАХ
     {
     Print("СТОП ЛОС ФИКСИРОВАННЫЙ В ПУНКТАХ");
     sl= razmer_fikc_sl*Point; // ПЕЕРМЕННОЙ СТОП ЛОССА ПРИСВАЕВАЕМ ФИКСИРОВАНОНЕ ЗНАЧЕНИЕ ПУНКТОВ И ДОМНОЖАЕМ НА ПОИНТ
     }

そして、正規化をコメントし、このように割り当てました。

     sl = fabs(OrderOpenPrice()-OrderStopLoss())/_Point;// ПРИСВОИЛ ЗНАЧЕНИЕ КАК СОВЕТОВАЛИ
     //sl= NormalizeDouble(sl,Digits());// НОРМАЛИЗАЦИЯ ЗНАЧЕНИЯ СТОП ЛОССА ДЛЯ ОТКРЫТИЯ СДЕЛКИ ТО  ЧТО БЫЛО ЗАКОМЕНТИРОВАЛ

利益計算はコードの次です。 そこは問題なく、利益計算の後に、アドバイスされた怖い計算式を追加しました。

double lot =MathFloor((Free*MaxRisk/100)/(sl/Point*LotVal)/Step)*Step; //СТРАШНАЯ ФОРМУЛА РАСЧЁТА ОБЪЁМА ЛОТА КОТОРУЮ МНЕ СОВЕТОВАЛИ

すべてエラーなくコンパイルされた。しかし、テストを実行すると、ログにエラーが表示され、ゼロによる除算が行われ、テストが停止してしまいます。どこで失敗したのか、何がいけなかったのか。

テスト開始時のエラー