専門家集団 - ページ 3

 
komposter<br /> translate="no">。
まだ調べていないのですが、あなたが計算しているポイント リファレンスが見つかりました。
捨てる」「バカにする」Pointを試してみてください。もしかしたら、それが問題なのかもしれません(MarketInfoを通したポイントは、必ずしも思い通りにならないかもしれない?)

いつもそうなんだけど...
ノーマライズすることも可能ですが =)

専門家が複数のペアで取引することもあり、ポイントが異なることもありますし、必ずしも受け入れられるものではありません。
 
この問題は、
最初のコンピューターチップと同じくらい古い
ものです。もちろん、悲しいことですが...。が、それを回避する方法はあるはずですよね?レナートが何か言ってくれないかなぁ・・・。
 
if ( orderstoploss == 0.0 || (  orderstoploss < ( bid - TrailingStop * point ) ) )


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 そしてまた、 .

if ( orderstoploss == 0.0 || (  orderstoploss < ( bid - TrailingStop * point ) ) )


は、 、痛みなく交換することができます。

if ( orderstoploss < ( bid - TrailingStop * point )) )


トレーリング時にストップロス水準がないことを確認する必要はないと思います。実はそうなんです、訂正します。利益が出たときだけストップロスを設定し、出なければマージンコールを待ってもいいということであれば。それ以外のものは見つかっていません。どのペアでトレーリングストップが正しく機能しなかったのでしょうか、また強い動きがあったのでしょうか?



 
こんにちは。
比較のためにすべてを整数値に変換しています。与えられた値を、できる限り(配列の中に)保存して使っています。
遣う
すなわち、int型の変数は-2147483648から2147483647までの値を取ることができる。
この次元は、クロスにかなり適している。
これに対応して、1.2999と1.3000は12999と13000にキャストして、安全に比較することができる。
定期的な失敗を気にすることなく、安心して使うことができます。

ここにその例をスケッチしてみました :)
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));
}
//+------------------------------------------------------------------+



を出力します。
シフトポイント EURUSD,H1: リアルダブル値 = 1.299999999
shiftpoint EURUSD,H1: シフトポイント 値=13000
シフトポイント EURUSD,H1: 復帰値=1.3000

 
一般的には、これを次のように置き換えます。
if ( orderstoploss < ( bid - TrailingStop * point )) )



if ( TrailingStop < ( bid -orderstoploss)/ point  )


あるいは。

 
皆様、ご参加ありがとうございました。
Rosh 17.04.05 22:29 <br / translate="no">末尾は必要ないかと思います。
私はそうは思いません。トレーリングは曖昧であってはならず、もしオンなら、SLが露出していることを意味します。

どのペアでトレーリングが正しく機能せず、強い動きがなかったのでしょうか?
現在、エキスパートがeuで動作していますが、時々エラーが出ます...。一日中...そんなことはないと思うのですが...。

一般的には、交換します。
今、私はそれを試してみる、多分それは助けになる ;) 私は明日あなたに言うだろう....

開始時刻 17.04.05 22:46
こんにちは。
比較のため、すべてを整数にしています
ハイ =) 確かに選択肢の一つではありますが...。でも、まさかこんなことになるとは......開発者に聞いてみたかった、彼らの方がよく分かっているはずなのに......。
 
申し訳ありません、議論に関与していませんでした。

2dev:
この問題は、最初のコンピュータチップと同じくらい古いものです。

その通りです。これは根本的な問題で、浮動小数点数を比較するのは危険なのです。
重要な場所では、常にNormalize()で数値を一定の精度にする。

算術演算の実装はどちらをお使いでしょうか?

ダブル型(8バイト)に統一する。 ちなみに、

トレードクエリーで 渡された価格は、エラーを避けるためにすべて強制的に正規化します。ストップロスを1.2932461としてリクエストを送っても、1.2932として設定されます。同じ価格でストップを再設定しようとすると、このようなエラーが発生するのかどうか、ご確認ください。

 
同じ価格でストップを再設定しようとすると、このようなエラーになるのかどうかご確認ください。

3人が見ていた =)) レナートが来て、ちょうどエラーに指をさしていた =))
もちろんこれから確認しますが、最も可能性が高いのはこのケースです......。bid - TrailingStop *point」を正規化していない、まさにこの構造が注文修正に関与している...。
私たちは気配り上手ではありません。)
 
重要な場所では、必ずNormalize()で一定の精度になるように数値を整えてください。

というのは、BEGUNさんが提案されたNormalize()のことでしょうか?
 
В важных местах постоянно приводите числа к определенной точности через Normalize().

というのは、BEGUNさんが提案されたNormalize()のことでしょうか?

すみません、標準のNormalizeDoubleの ことです。