int Normalize(double double_value, int digits) - приводит double в int (1.2999 в 12999)
double Restore(int int_value, int digits) - приводит полученный ранее int в double (12999 в 1.2999)
これ
//+------------------------------------------------------------------+
//| ShiftPoint.mq4 |
//| Begun |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
int Normalize(double double_value, int digits)
{
return (NormalizeDouble(double_value,digits)*MathPow(10,digits));
}
double Restore(int int_value, int digits)
{
return (NormalizeDouble((int_value/MathPow(10,digits)),digits));
}
//+------------------------------------------------------------------+
int start()
{
double Test_Value = 1.29999999;
int Test_int;
double Test_double;
Test_int = Normalize(Test_Value,Digits);
Test_double = Restore(Test_int,Digits);
Print("-----------------------------");
Print("Restored value = ",DoubleToStr(Test_double,Digits));
Print("Shift Point Value = ",Test_int);
Print("Real Double Value = ",DoubleToStr(Test_Value,8));
}
//+------------------------------------------------------------------+
まだ調べていないのですが、あなたが計算しているポイント リファレンスが見つかりました。
捨てる」「バカにする」Pointを試してみてください。もしかしたら、それが問題なのかもしれません(MarketInfoを通したポイントは、必ずしも思い通りにならないかもしれない?)
いつもそうなんだけど...
ノーマライズすることも可能ですが =)
専門家が複数のペアで取引することもあり、ポイントが異なることもありますし、必ずしも受け入れられるものではありません。
orderstoploss = 1.29211 (小数点以下5桁) bid=1.29716 (同じく5桁) TrailingStop = 50 point =0.001 then (bid - TrailingStop * point)=1.29216>1.29211 True, this requires that
digits suddenly become 5 そしてまた、 .
は、 、痛みなく交換することができます。
トレーリング時にストップロス水準がないことを確認する必要はないと思います。実はそうなんです、訂正します。利益が出たときだけストップロスを設定し、出なければマージンコールを待ってもいいということであれば。それ以外のものは見つかっていません。どのペアでトレーリングストップが正しく機能しなかったのでしょうか、また強い動きがあったのでしょうか?
比較のためにすべてを整数値に変換しています。与えられた値を、できる限り(配列の中に)保存して使っています。
遣う
すなわち、int型の変数は-2147483648から2147483647までの値を取ることができる。
この次元は、クロスにかなり適している。
これに対応して、1.2999と1.3000は12999と13000にキャストして、安全に比較することができる。
定期的な失敗を気にすることなく、安心して使うことができます。
ここにその例をスケッチしてみました :)
これ
を出力します。
シフトポイント EURUSD,H1: リアルダブル値 = 1.299999999
shiftpoint EURUSD,H1: シフトポイント 値=13000
シフトポイント EURUSD,H1: 復帰値=1.3000
で
あるいは。
こんにちは。
比較のため、すべてを整数にしています
2dev:
その通りです。これは根本的な問題で、浮動小数点数を比較するのは危険なのです。
重要な場所では、常にNormalize()で数値を一定の精度にする。
。
ダブル型(8バイト)に統一する。 ちなみに、
トレードクエリーで 渡された価格は、エラーを避けるためにすべて強制的に正規化します。ストップロスを1.2932461としてリクエストを送っても、1.2932として設定されます。同じ価格でストップを再設定しようとすると、このようなエラーが発生するのかどうか、ご確認ください。
3人が見ていた =)) レナートが来て、ちょうどエラーに指をさしていた =))
もちろんこれから確認しますが、最も可能性が高いのはこのケースです......。bid - TrailingStop *point」を正規化していない、まさにこの構造が注文修正に関与している...。
私たちは気配り上手ではありません。)
というのは、BEGUNさんが提案されたNormalize()のことでしょうか?
というのは、BEGUNさんが提案されたNormalize()のことでしょうか?
すみません、標準のNormalizeDoubleの ことです。