tickSize = SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_SIZE);
ask = SymbolInfoDouble(symbol, SYMBOL_ASK);
bid = SymbolInfoDouble(symbol, SYMBOL_BID);
spread = ask - bid; // Заметьте - спред получаем не через MarketInfo, и не через SymbolInfoInteger
digits = (int) SymbolInfoInteger(symbol, SYMBOL_DIGITS);
point = SymbolInfoDouble(symbol, SYMBOL_POINT);
stopLevel = MarketInfo(symbol, MODE_STOPLEVEL) * point; // До сих пор встречаются случаи, когда SymbolInfoInteger и MarketInfo выдают разные значения. MarketInfo пока ближе к истинеif (stopLevel == 0)
{
if (!isECN) // isECN - признак ECN-счета, на котором Stop Level действительно равен 0
topLevel = NormalizeDouble(2 * spread, digits);
}
else
stopLevel = NormalizeDouble(stopLevel + tickSize, digits); // Сознательное увеличение размера Stop Level на один тик, чтобы постоянно не натыкаться на ошибку 130.
正規化を使っていないときに、このエラーが出ました。すでに書きました。
計測器のプロパティを 見ると、Stop Levelが0になっているかもしれないので、正規化してみる。
はい、ブローカーがA*****iであれば、そのStop Levelは0であることが多いです。しかし、同時にサポートチームは、正しいストップレベルを得るためには2つのスプレッドを使用する必要があると書いています。したがって、Stop Levelで最も多くのケースをカバーするコードは以下の通りである。
ツールのプロパティを見て、ストップレベルが0になっているかもしれないので、正規化を試してみてください。
正規化を使っていないときに、このエラーが出ました。すでに書きました。
はい、ブローカーがA*****iであれば、そのStop Levelは0であることが多いです。しかし、同時にサポートチームは、正しいストップレベルを得るためには2つのスプレッドを使用する必要があると書いています。そのため、Stop Levelで最も多くのケースをカバーするコードは以下のようになります。
この台所から離れろ...
であろうとなかろうと
今日の貿易から一枚...すべての注文は、まったく同じアルゴリズムに従って開かれるため、条件は常に同じです。とはいえ、エラーはうらやましいほどの頻度で発生する。どこでも、ストップは常にストップレベルより大きく、注文は常に現在の価格からストップレベルより遠いところに置かれていることがわかります。
また、別のブローカーのデモ口座では、この間、一度もエラーが発生していません。