マーケットで公開されているEAにおける最小ストップの確認。

 

皆さん、こんにちは。

Marketplaceの特徴 として、min stopのすべての値をチェックする必要があります。

変数の値がmin-stopより小さい場合は、min-stopを代入し、エラー130が 発生しないようにします。

現在、90%のブローカーがフローティングスプレッドと最小STOP、利回り0を採用しています。

すべての変数をmin stopに代入するコード構成が ある。

 int OnInitLevels(string symToWorkmodify)
  {
   if(lot<SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MIN))lots=SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MIN);else
   if(lot>SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MAX))lots=SymbolInfoDouble(symToWorkmodify,SYMBOL_VOLUME_MAX);else lots=lot;
   if(StopLoss>0 && StopLoss<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))StopLosss=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else StopLosss=StopLoss;
   if(TakeProfit>0 && TakeProfit<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TakeProfits=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TakeProfits=TakeProfit;
   if(TrailingStop>0 && TrailingStop<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TrallingStops=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TrallingStops=TrailingStop;
   if(TakeProfitALL>0 && TakeProfitALL<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TakeProfitsAver=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TakeProfitsAver=(int)TakeProfitALL;
   if(TrailingStop>0 && TrailingStop<SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL))TrallingStops=(int)SymbolInfoInteger(symToWorkmodify,SYMBOL_TRADE_STOPS_LEVEL);else TrallingStops=TrailingStop;
   return(0);
  }

しかし、今はどこでもminstop=0なので、マーケットプレイスではもう通用しないのです。

誰がこの問題に取り組んでいるのでしょうか?

 

もちろん、そんなことはありません ))))最小に設定すべきなのはSL、TP、TSではなく、Stop Levelです。しかも、プログラム開始時に1回だけでなく、毎回のクリックで

   digits          = (int) SymbolInfoInteger(symbol, SYMBOL_DIGITS);
   point           = SymbolInfoDouble(symbol, SYMBOL_POINT);
   
   tickSize        = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE);
   
   ask             = SymbolInfoDouble(symbol, SYMBOL_ASK);
   bid             = SymbolInfoDouble(symbol, SYMBOL_BID);
   spread          = ask - bid;

   stopLevel       = MarketInfo(symbol, MODE_STOPLEVEL) * point;
   
   if (stopLevel == 0)
   {
      if (!isECN)
         stopLevel = NormalizeDouble(2 * spread, digits);
   }
   else
      stopLevel = NormalizeDouble(stopLevel + tickSize, digits);
isECN - ユーザーが設定可能であること。真のECN」のように、本当に最小距離に制限がない、つまりストップ/プロフィット/ポジションをスプレッドの内側に設定できる口座があります。
 

しかし、あなたのデザインは私と同じです。ただ、min stop = 0でスプレッド*2を掛けただけで、多くのブローカーでmin stop = 3スプレッドであることを知っているのに、なぜ2にしてしまったのでしょうか?

毎ティック ごとにミニストップを確認しています。

 
StopLevelもゼロを返すので役に立ちません、Ask-Bidの差を使いましょう。
 
Alexander Bereznyak:
StopLevelも0を返すので役に立ちません、Ask-Bidの差を使います。
はスプレッド用で、ミニストップ用は?
 
を、そして分停止も
 
Alexander Bereznyak:
と、分停止にも対応。
では、ミニストップをスプレッドと同じにするのですか?
 
Vladislav Andruschenko:

皆さん、こんにちは。

Marketplaceの特徴として、min stopのすべての値をチェックする必要があります。

変数の値がmin-stopより小さい場合は、min-stopを代入し、エラー130が 出ないようにします。

現在、90%のブローカーがフローティングスプレッドと最小STOP、利回り0を採用しています。

すべての変数をmin stopに代入するコード構成が ある。

しかし、今はどこでもminstop=0なので、マーケットプレイスではもう通用しないのです。

誰がこの問題に取り組んでいるのでしょうか?

オプションとして、最小停車位置の制限を導入する。例えば、OnInit()において、ユーザーが2ポイント未満のストップを設定した場合、警告を与え、コードINIT_PARAMETERS_INCORRECTを返すようにします。

また、ユーザーがストップサイズをコントロールするのではなく、取引状況に応じてExpert Advisorで動的に計算させるという方法もあります。

 
ブローカーがmin stopを0としているため、他にやることはない、スプレッドが十分でない場合は倍率を上げることができる
 
Vitalii Ananev:

あるいは、最小ストップサイズに制限を導入することも可能です。例えば、OnInit()において、ユーザーが2pips未満のストップを設定した場合、警告を出し、INIT_PARAMETERS_INCORRECTというコードを返します。

また、ユーザーがストップサイズをコントロールできないようにし、取引状況に応じてExpert Advisorで動的に計算することも可能です。

私は同意する - 制御を与えることではなく、あなたはそれがタイプによって要求される方法を知っている:私は自分のストップを設定したいです。

メッセージ出力について考えてみます - ありがとうございました。

 
Alexander Bereznyak:
ブローカーがmin stopをゼロと宣言しているので、他にやることはない、スプレッドが足りなければ倍率を拾えばよい

はい、これは市場のためだけです - しかし、任意のブローカーのための普遍性はありません

その仕組みは、マーケットで受け入れられるためには、3つのスプレッドで最小のストップを作る必要があります。

唯一の違いは、市場がそれらを受け入れることです - あなたは、最小の停止と3スプレッドを作る必要がありますが、実際にはこれは間違っている - ブローカーの最小の停止= 1スプレッド場合 - ユーザーは3未満のスプレッドを置くことができなくなります。

バッフル