if (Volume[0]>1)return;
for(int b=OrdersTotal()-1;b>=0; b--)
{
if(atr2kTP == atr2kTPAdjust|| btphold==btp)) return;//-----------This is where I am comparing them, and where the function would go.if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MAGICMA)
if(OrderSymbol()==Symbol())
if(OrderType()==OP_BUY)
atr2kTPAdjust=atr2kTP;
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),btp,0,CLR_NONE);
}
for(int s=OrdersTotal()-1;s>=0; s--)
{
if(atr2kTP == atr2kTPAdjust|| stphold==stp) return;
if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES))
if(OrderMagicNumber()==MAGICMA)
if(OrderSymbol()==Symbol())
if(OrderType()==OP_SELL)
atr2kTPAdjust=atr2kTP;
OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),stp,0,CLR_NONE);
}
}
それこそ二重の意味でカンベンしてください...。(ダジャレです。)
いくつかのカスタム関数が 提案されましたが、どれもコンセンサスに達していないようです。どなたか、この時点で(ダジャレではなく)、日常的にCompareDouble関数として使用しているものを教えていただけませんか?
もちろん、信頼性の高いシステムを構築するためには、何らかのカスタム CompareDouble 関数を使用しなければなりません。
この問題は、EXACT値が重要でない限り、ほとんど無視することができます。
もし、私がトリガー価格(非標準化される可能性がある)より上に オープンすることを望んでいるなら、Bid > trigger を使用します。丸め誤魔化してその価格で トリガーされることがあっても、私は本当に気にしません。
もし、トリガーとなる価格(標準化されていない可能性のある価格)かその近辺で オープンしたい場合は、ギャップをテストします。ビッド > トリガー && ビッド < トリガー + 3*pips2dbl.市場は1ティックで簡単に1ピップ動くので、ビッド==トリガーは常に間違っており、MathAbs(bid-trigger) < Point/2 は正しいですが、ほとんどの場合うまくいきません。
もし、SLを移動させたいが、マーケットに近すぎる(ストップレベル)場合など、等値が重要な場合は、Bid - newSL > StopLelvel - Point/2 を使用します。
問題は、EXACT値が重要でない限り、ほとんど無視することができます。
もし、トリガー価格(不自然になる可能性がある)より上に オープンしたい場合は、Bid > trigger を使用します。丸め誤魔化してその価格で トリガーされたとしても、私は本当に気にしません。
もし、トリガーとなる価格(標準化されていない可能性のある価格)かその近辺で オープンしたい場合は、ギャップをテストします。ビッド > トリガー && ビッド < トリガー + 3*pips2dbl.市場は1ティックで簡単に1ピップ動くので、ビッド==トリガーは常に間違っており、MathAbs(bid-trigger) < Point/2 は正しいですが、ほとんどの場合うまくいきません。
もし、SLを動かしたいけど、マーケットに近すぎる(ストップレベル)等、イコールが重要な場合は、Bid - newSL > StopLelvel - Point/2 を使用することにしています。
ありがとうございます。今、それは私がdecoctedスレッドを呼び出すだろうものだ...
実際、あなたがおっしゃることは、私のアプリケーションに非常に近いものです。 私は、新しいTakeProfitが、すでに設定され送信されたオリジナルのTakeProfitと異なるかどうか(ブローカーまたはMQL4標準に従って)確認しています。 私は、OrderModifyが呼ばれる前に、2つのインジケータ値と2つのTakeProfit値を比較しているのです。
これは私の最終的なOrderModのコードで、Double orderの値を比較するためにPoint/2フィルターを使用しました。 エラーなしで動作し、毎回注文が修正されました。 ありがとうございました。
newBarは素晴らしい働きをします。
MathAbsは、式の左辺のマイナスを変換するだけだと思っていたので、差分もプラス値に変換してくれるとは知りませんでした。
ポイント/2の精度は、私のシグナルの目的には重要ではありません。 私は、弱々しいコーディングを避けるために、丸め誤差を避けたかっただけです。
丸め誤差と同じように、度数誤差も踏みにじりたい。 だから、最も正確な計算コードとは 対照的に、最も誤差のない安定した計算を使いたいのです。
だから、私のTakeProfit MathAbs (stphold - stp)の比較を2*pips以上に増やすことによって、私はラウンドオフエラーと周波数エラーを排除する最大のチャンスがあるはずです?
ありがとうございました。
newBarはとてもうまくいきます。
以前はIsNewCandleに問題がありましたので、ボリュームトリガーに変更しました。もしボリュームティックの処理が遅かったり欠けたりするなら、ローソク足もそうなる可能性があります。だから、両方は悪い考えでした。
newBarは問題なく動くので、今度はIsNewCandleの失敗を特定しようと、以下のようなコードを書いてみました。
IsNewCandle()関数の呼び出しはstart()の中にあり、newBarのコードラインの上にある。IsNewCandle()関数の呼び出しはstart()の中、newBarのコードラインの上にあります。
私の意見では、新しいバーのチェックを関数に 入れるのは悪い考えです。関数はコードを再利用可能にするために使われます ... 新しいバーの同じ最初のティックの間に2回IsNewCandle()を呼んでみて、あなたが得るどんな答えを見るか ... ...
ところで ... ... これはこのスレッドのトピックから外れています、あなたが議論を続けることを望むなら、新しいスレッドにそれを移動してください。私は後で片付けます .
...価格はポイントの倍数でしか変化しないので、ポイント/2はまさに...です。
価格を 比較するのであれば、問題ない。しかし、もしあなたが2倍を比較するのであれば、例えば価格の平均を比較するのであれば、Point/2 ではだめです。
価格を 比較するのであれば、問題ありません。しかし、2倍を比較する場合、例えば、価格の平均を比較する場合、Point/2は行いません。
このトピックのタイトルに気づきましたか?
;)
価格を 比較するのであれば、問題ありません。しかし、2倍を比較する場合、例えば、価格の平均を比較する場合、Point/2は機能しません。