初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 91

 
Jenya77769:

こんにちは!2つのマイナス数qとwが等しいときに、if演算子が一方が他方より大きいと思ってしまう、間違った比較をしています。q=-0.0002でwも-0.0002のとき、res12=falseとなりますが、なぜでしょうか?

はダブルであり、両者は完全に等しくないからです。

図:規格化された値の比較

 
Jenya77769:

こんにちは!2つのマイナス数qとwが等しいときに、if演算子が一方が他方より大きいと思ってしまう、間違った比較をしています。q=-0.0002でwも-0.0002のとき、res12=falseとなりますが、なぜでしょうか?


この方法はより正確で、どのような種類の数に対しても有効です。

 

皆さん、ここで質問です。

一線、一日分あります。

テキストラベル、ラベルオブジェクトを持っています。

このテキストラベルを、チャートをどのように拡大しても、常に線の真ん中(日の真ん中)にあるようにするにはどうしたらよいでしょうか。

 
John Smith:

皆さん、ここで質問です。

一線、一日分あります。

テキストラベル、ラベルオブジェクトを持っています。

このテキストラベルを、チャートをどのように拡大しても、常に線の真ん中(日の真ん中)にあるようにするにはどうしたらよいでしょうか。

ラベルのX座標を変更する、つまり線の真ん中として計算する
 
Renat Akhtyamov:
マーカーのX座標を変更する、つまり線の真ん中として計算する

まあ、それは理解できるのですが、どうしたらいいのでしょう?


もう一つの選択肢は、マーカーを一日の始まりに結びつけ、チャートのズームに応じてマーカーの値の前にスペースを挿入するテキスト変数を使用することでした。

要するに、クローズズームではラベルを左側に、ズームアウトではラベルを真ん中に移動させたいということです。mt4のズームレベルは標準的なものなので、各ズームレベルに対して適切なスペース数を見つけることはそれほど難しくありません。しかし、ここで質問ですが、mql4には現在のチャートのズームレベルを決定するような機能はあるのでしょうか?

そうすれば、「もしchartzoom = 50%なら、spacesnumber = 10」といった具合に、すべてがシンプルになるはずです。

spacesnumberはラベルテキストの前のスペースの数を定義する文字列変数で、 __________1.23456 - _の記号で10個のスペースがある、というようになります。

 
John Smith:

まあ、それは理解できるのですが、どうしたらいいのでしょう?


もう一つの選択肢は、マーカーを一日の始まりに結びつけ、チャートのズームに応じてマーカーの値の前にスペースを挿入するテキスト変数を使用することでした。

要するに、クローズズームではラベルを左側に、ズームアウトではラベルを真ん中に移動させたいということです。mt4のズームレベルは標準的なものなので、各ズームレベルに対して適切なスペース数を見つけることはそれほど難しくありません。しかし、ここで質問ですが、mql4には現在のチャートのズームレベルを決定するような機能はあるのでしょうか?

そうすれば、「もしchartzoom = 50%なら、spacesnumber = 10」といった具合に、すべてがシンプルになるはずです。

spacesnumberはラベルテキストの前のスペースの数を定義する文字列変数で、 __________1.23456 - _の記号で10個のスペースがある、というようになります。

私のコメントはこちら
 

こんにちは、皆さん!またまたヘルプが必要です。エラーの原因がわからない。もう一度トロールをする。MAによるトロール。いくつかの注文をたらい回しする必要がある。ループがある場合があります。1つのオープンオーダーがある限り、すべてが完璧に機能します。もう1つのオーダーが開かれると、バッカニアが始まる - 最初のオーダーを常に(1つの同じパラメータで)修正する(エラー1は表示されない)。この場合、2番目のオーダーは、適切な条件が満たされたときに、あるべき姿に修正されます(1番目のオーダーは、条件が変わると、そのパラメータを変更し、新しいパラメータで絶えず修正し続ける)。その理由が見つからない。誰がヒントをくれるのだろう?

void TrailingStop()
{
   int i;
   int k          = OrdersTotal(); 
   double Ma      = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 1); 
   int MinDistans = int(MarketInfo(Symbol(), MODE_STOPLEVEL));
   
   double lips1  = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 1); 
   double lips2  = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORLIPS, 2);
   double teeth1 = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, 1);
   double teeth2 = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORTEETH, 2);
   double jaw1   = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW , 1);
   double jaw2   = iAlligator(NULL, 0, 13, 8, 8, 5, 5, 3, MODE_SMMA, PRICE_MEDIAN, MODE_GATORJAW , 2);
   
   for (i = 0; i < k; i++)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         {
            if(OrderType() == OP_BUY)
            {
               if(lips2 < teeth2 && teeth2 < jaw2 && lips1 < teeth1 && teeth1 < jaw1)
                  break;
               
               if(lips2 > teeth2 && teeth2 > jaw2 && lips1 > teeth1 && teeth1 > jaw1)
               {   
                  if((OrderStopLoss() + TrailingStep*Point) < Ma)
                  {
                     double Sl = NormalizeDouble(Ma, Digits);                 
                     
                     if((Bid - MinDistans) > Sl && (OrderStopLoss() + TrailingStep*Point) < Sl)
                     { 
                        OrderModifyX(OrderTicket(), OrderOpenPrice(), Sl, OrderTakeProfit(), OrderExpiration(), 0);
                     }
                  }
               }
            }
         }
      }     
 
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))  
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         {
            if(OrderType() == OP_SELL)
            {
               if(lips2 > teeth2 && teeth2 > jaw2 && lips1 > teeth1 && teeth1 > jaw1)
                  break;
                  
               if(lips2 < teeth2 && teeth2 < jaw2 && lips1 < teeth1 && teeth1 < jaw1)
               {
                  if(MathAbs(OrderStopLoss() - TrailingOpen*Point) > Ma)
                  {
                     double Sl = NormalizeDouble(Ma, Digits);
                 
                     if((Ask + MinDistans) < Sl && (OrderStopLoss() - TrailingStep*Point) > Sl)
                     {
                        OrderModifyX(OrderTicket(), OrderOpenPrice(), Sl, OrderTakeProfit(), OrderExpiration(), 0);
                     }
                  }
               }
            }
         }
      }
   }
}



 
Youri Lazurenko:

こんにちは、皆さん!またまたヘルプが必要です。エラーの原因がわからない。もう一度トロールをする。MAによるトロール。いくつかの注文をたらい回しする必要がある。ループがある場合があります。1つのオープンオーダーがある限り、すべてが完璧に機能します。もう1つのオーダーが開かれると、バッカニアが始まる - 最初のオーダーを常に(1つの同じパラメータで)修正する(エラー1は表示されない)。この場合、2番目のオーダーは、適切な条件が満たされたときに、あるべき姿に修正されます(1番目のオーダーは、条件が変わると、そのパラメータを変更し、新しいパラメータで絶えず修正し続ける)。その理由が見つからない。誰が助けてくれるの?


1.このサイクルを逆回転させる必要があります。

2.何のための休憩?

 
Artyom Trishkin:

1.このサイクルを逆転させなければならない。

2.何のためのブレークなのか?


こんにちは。

1 - 「ループは逆でなければならない」 - for(i = k; i > 0; i--)のことでしょうか?

2."何のための休憩?"- 終了するには一般的に、最初のうちは注文の種類を 選択した後、トレンドブレイクに反している場合はその後、再度注文タイプを選択し、トレンドがあれば修正します。

以前、このバリアントブレーキングに助けられました。MAによるトロールの解決策をご提案いただいたとき。例えば、買いの取引で、ストップがMAの上にあった場合、MAがストップの上に来るまではエラー1が発生し、その後はエラーが消えました。ストップがMAより上ならブレイクという条件を導入したら、すべてが元に戻りました。

 
Youri Lazurenko:

こんにちは。

1 - 「ループを反転させなければならない」 - for(i = k; i > 0; i--)のことでしょうか?

2."何のための休憩?"- 終了するには一般的に、最初のうちは注文の種類を 選択した後、トレンドブレイクに反している場合はその後、再度注文タイプを選択し、トレンドがあれば修正します。

以前、このバリアントブレーキングに助けられました。MAによるトロールの解決策をご提案いただいたとき。例えば、買いの取引で、ストップがMAの上にあった場合、MAがストップの上にあるまでエラー1が発生し、その後エラーが消えました。ストップがMAより上にあれば、という条件をつけたら、すべて正常化した。

のブレイクで完全にループが完成します。では、それ以外のポジションはどうでしょうか。
ストップがその新しいレベルに対してどの位置にあるかを確認します。
OrdersTotal()-1 から >=0 までの逆ループ