価格 != 価格 ? - ページ 6

 

それこそ二重の意味でカンベンしてください...。(ダジャレです。)

いくつかのカスタム関数が 提案されましたが、どれもコンセンサスに達していないようです。どなたか、この時点で(ダジャレではなく)、日常的にCompareDouble関数として使用しているものを教えていただけませんか?

もちろん、信頼性の高いシステムを構築するためには、何らかのカスタム CompareDouble 関数を使用しなければなりません。

 

この問題は、EXACT値が重要でない限り、ほとんど無視することができます。

もし、私がトリガー価格(非標準化される可能性がある)より上に オープンすることを望んでいるなら、Bid > trigger を使用します。丸め誤魔化してその価格で トリガーされることがあっても、私は本当に気にしません。

もし、トリガーとなる価格(標準化されていない可能性のある価格)かその近辺で オープンしたい場合は、ギャップをテストします。ビッド > トリガー && ビッド < トリガー + 3*pips2dbl.市場は1ティックで簡単に1ピップ動くので、ビッド==トリガーは常に間違っており、MathAbs(bid-trigger) < Point/2 は正しいですが、ほとんどの場合うまくいきません。

もし、SLを移動させたいが、マーケットに近すぎる(ストップレベル)場合など、等値が重要な場合は、Bid - newSL > StopLelvel - Point/2 を使用します。

 
WHRoeder:

問題は、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値を比較しているのです。

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);
         }
 }
 

これは私の最終的なOrderModのコードで、Double orderの値を比較するためにPoint/2フィルターを使用しました。 エラーなしで動作し、毎回注文が修正されました。 ありがとうございました。

void AutoAdjustTakeProfit()
{
if (Volume[0]>1 || atr2kTP == atr2kTPAdjust)return;  

       for(int b=OrdersTotal()-1;b>=0; b--)
          { 
            if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
               if(OrderMagicNumber()==MAGICMA)
                 if(OrderSymbol()==Symbol())
                    {          
                      if(OrderType()==OP_BUY)// buy ordeer section
                        {  
                          if((btphold-btp> Point/2) || (btphold-btp<-Point/2))  //--------------------------This is the DoubleCompare Code
                            {                                                                             
                              atr2kTPAdjust=atr2kTP; 
                              OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),btp,0,CLR_NONE);                          
                            }
                        } 
                     
                      if(OrderType()==OP_SELL) // Sell ordeer section
                        {   
                          if((stphold-stp>Point/2) || (stphold-stp <-Point/2)) //--------------------------This is the DoubleCompare Code
                            {                                                  
                               atr2kTPAdjust=atr2kTP;                      
                               OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),stp,0,CLR_NONE);
                            }
                        }
                    }
           }
}
 
  1. if (Volume[0]>1)return;
    新しいバーの開始時にいくつかのティックを逃すと、コードが実行されません。常に時間を使用する
  2.   if((stphold-stp>Point/2) || (stphold-stp <-Point/2))
      if( MathAbs(stphold - stp) > Point/2) // Simplified
    繰り返しますが、あなたは本当に等号を気にしているのでしょうか?もしあなたが:
      if( MathAbs(stphold - stp) >= Point)
    を使用した場合、1ポイントより少し少ないところでトリガーされるかもしれません。それはまだ等しくないのと同じです。
  3. なぜポイント移動させるのか、ピップ単位で移動させて丸め誤魔化してERR_TOO_FREQUENT_REQUESTSを回避する。
 

newBarは素晴らしい働きをします。

MathAbsは、式の左辺のマイナスを変換するだけだと思っていたので、差分もプラス値に変換してくれるとは知りませんでした。

ポイント/2の精度は、私のシグナルの目的には重要ではありません。 私は、弱々しいコーディングを避けるために、丸め誤差を避けたかっただけです。

丸め誤差と同じように、度数誤差も踏みにじりたい。 だから、最も正確な計算コードとは 対照的に、最も誤差のない安定した計算を使いたいのです。

だから、私のTakeProfit MathAbs (stphold - stp)の比較を2*pips以上に増やすことによって、私はラウンドオフエラーと周波数エラーを排除する最大のチャンスがあるはずです?

ありがとうございました。

removed.

 
moneycode:

newBarはとてもうまくいきます。

以前はIsNewCandleに問題がありましたので、ボリュームトリガーに変更しました。もしボリュームティックの処理が遅かったり欠けたりするなら、ローソク足もそうなる可能性があります。だから、両方は悪い考えでした。

newBarは問題なく動くので、今度はIsNewCandleの失敗を特定しようと、以下のようなコードを書いてみました。

IsNewCandle()関数の呼び出しはstart()の中にあり、newBarのコードラインの上にある。IsNewCandle()関数の呼び出しはstart()の中、newBarのコードラインの上にあります。

私の意見では、新しいバーのチェックを関数に 入れるのは悪い考えです。関数はコードを再利用可能にするために使われます ... 新しいバーの同じ最初のティックの間に2回IsNewCandle()を呼んでみて、あなたが得るどんな答えを見るか ... ...

ところで ... ... これはこのスレッドのトピックから外れています、あなたが議論を続けることを望むなら、新しいスレッドにそれを移動してください。私は後で片付けます .

 
WHRoeder:

...価格はポイントの倍数でしか変化しないので、ポイント/2はまさに...です。


価格を 比較するのであれば、問題ない。しかし、もしあなたが2倍を比較するのであれば、例えば価格の平均を比較するのであれば、Point/2 ではだめです。
 
HarriMQL4:

価格を 比較するのであれば、問題ありません。しかし、2倍を比較する場合、例えば、価格の平均を比較する場合、Point/2は行いません。


このトピックのタイトルに気づきましたか?

;)

 
HarriMQL4:

価格を 比較するのであれば、問題ありません。しかし、2倍を比較する場合、例えば、価格の平均を比較する場合、Point/2は機能しません。
価格は 2倍である .. .