エラー、バグ、質問 - ページ 872

 
こんにちは。
Meta Trader 5をインストールする際、どのProxyサーバーをインストールすればよいですか?
 
Vladon:

はmt5で動作します。

はい、それはユーロ/ドルでエラー01.10.20112から06.10.2012を計算し、動作します。
ファイル:
20121111.log  60 kb
 
mario065:
はい、それはユーロ/ドルでエラー01.10.20112から06.10.2012を計算し、動作します。

どうゆうこと

failed modify buy 0.10 EURUSDsl: 1.29120, tp: 1.29370 -> sl: 1.29120, tp: 1.29370 [Invalid stops].

JF 0 Core 1 19:48:37 2012.10.03 16:20:27モディファイエラー =4756

ストップロスやテイクプロフィットはそれ自体変更できない、だからストップエラーと書いてある、なぜか意外とある。

 
Vladon:

どうゆうこと

failed modify buy 0.10 EURUSDsl: 1.29120, tp: 1.29370 -> sl: 1.29120, tp: 1.29370 [Invalid stops].

JF 0 Core 1 19:48:37 2012.10.03 16:20:27モディファイエラー =4756

Stoplossとtakeprofitはそれ自体変更できないと言うことです、だからストップエラーと書いてあるのです、なぜ驚くのでしょう。

はい、そしてコードに書かれていること。
  if(PositionSelect(Symbol())){
    if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
      {
      if(MStop > 0)
       {
        if(NormalizeDouble(Bid - MStop,4) >= Open)
          if(SL == 0 || NormalizeDouble(Bid - MStop,4) >= SL) 
           {
            ModifyPosition(Symbol(),NormalizeDouble(Bid - MStop,4),TP);
           }
        }
      }
    if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
      {
      if(MStop > 0)
       { 
        if(NormalizeDouble(Ask + MStop,4) <= Open)
          if(SL == 0 || NormalizeDouble(Ask + MStop,4) <=SL) 
           {
            ModifyPosition(Symbol(),NormalizeDouble(Ask + MStop,4),TP);
           }
        }
      }
     } 
  }

10pipsの後にストップを変更するかどうか?

ストップを変更するタイミングを指定した場合、10pipsを高いと計算するにはどうしたらよいですか?

if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)とする。

買い場があれば

if(MStop > 0)

MStopが0以上の場合

if(NormalizeDouble(Bid - MStop,4) >= Open)

買値からMStop値を引いた値が、売値より大きい場合 double Open = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),4)

を4桁で指定する。

if(SL == 0 || NormalizeDouble(Bid - MStop,4) >= SL)

Stoploop = 0またはBid価格からStoploopレベルよりpips高いか等しいポイントを差し引いた場合。

何が明確でないのか?

MT4では問題なく動作します。

MT5で使ってます、不具合です。

MT5ではStopLevel(SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL))のため、さらに設定。それでも不具合がある。

Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций
  • www.mql5.com
Стандартные константы, перечисления и структуры / Торговые константы / Свойства позиций - Документация по MQL5
 
しかし、コメントは、自分で見てください。
 
mario065:
そう、そしてコードに書かれていること。

ストップは10pips後に変更したほうがいいのでしょうか?

では、ストップを変更するタイミングを指定した場合、10pipsを高いと計算するにはどうすればいいのでしょうか?

if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)とする。

買い場があれば

if(MStop > 0)

MStopが0以上の場合

if(NormalizeDouble(Bid - MStop,4) >= Open)

買値からMStop値を引いた値が、売値より大きい場合 double Open = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),4)

を4桁で指定する。

if(SL == 0 || NormalizeDouble(Bid - MStop,4) >= SL)

Stoploop = 0またはBid価格からStoploopレベルよりpips高いか等しいポイントを差し引いた場合。

何が明確でないのか?

MT4では問題なく動作します。

MT5で使ってます、不具合です。

MT4で計算するとうまくいくので、MT5でさらにストップレベルを設定しました(SymbolInfoInteger(_Symbol,SYMBOL_TRADE_STOPS_LEVEL))。それでも不具合があります。


if(NormalizeDouble(Bid - MStop,4) >= Open)
                                  ^^^^^^
                                Что за хрень?

if(SL == 0 || NormalizeDouble(Ask + MStop,4) <=SL) 
  ^^^^^^^^                 ^^^^^^^^^^^^^^
Почему не нормализовано? Нахрена это нормализовать?

 

単純なことで、ストップのレベルが間違っている、つまり最小値より1ストップ低いのです。

何が理解できないのか?

 
Vladon:

単純なことで、ストップのレベルが間違っている、つまり最小値より1ストップ低いのです。

何が理解できないのか?

必要以上に関節が多いので、そこを勘違いしているのでしょう。
 
Reshetov:

レシェトフさん、こんにちは。

あなたにとっては「なんじゃこりゃ」、私にとっては「修正機能の呼び出しをしなければならない状態」です。

コードを見ていれば、書かないはずです。

if(NormalizeDouble(Bid - MStop,4) >= Open)
                                  ^^^^^^
                                Что за хрень?

if(SL == 0 || NormalizeDouble(Ask + MStop,4) <=SL) 
  ^^^^^^^^                 ^^^^^^^^^^^^^^
Почему не нормализовано? Нахрена это нормализовать?

コードではそうなっています。

  double Bid  = NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID),4);
  double Ask  = NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK),4);
  double Open = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),4);
  double SL   = NormalizeDouble(PositionGetDouble(POSITION_SL),4);
  double TP   = NormalizeDouble(PositionGetDouble(POSITION_TP),4);

翻訳条件。

input double MStop  = 0.001;
double Open = NormalizeDouble(PositionGetDouble(POSITION_PRICE_OPEN),4);
if(NormalizeDouble(Bid - MStop,4) >= Open)

Bid-MStopの価格がポジションの開始 レベルより高いか等しい場合、修正関数を呼び出すことが可能です-それ以前にはできません。

また、これは正しい方法ではなく、コードに書かれていることなので、正しく行う必要があります。

if(SL == 0 || NormalizeDouble(Bid - MStop,4) >= SL)

2回目の正規化は念のためということで、悪くはないと思います。

条件そのもの(Sell Positiveの条件から取ったもの)。

もし、ストップロスがゼロ、またはビッドから10ピップス以上引いた値がストップロス・レベルと等しい場合、モディファイ機能を呼び出すことができます。

価格が高くなり、ストップロスが変更された場合、次のコールは10ピップス後に行われ、すべてのティックに残すことを避けることができます。

ということを書いたのですが、その通りだと思います。

正しいのか間違っているのか、私のミスなのかバグなのか、教えてくれると思っていたのですが?

 
mario065:

レシェトフさん、こんにちは。

あなたにとっては「なんじゃこりゃ」、私にとっては修正機能呼び出しの時の状態です。

...
Reshetovが言いたかったのは、ifの変数を正規化する必要はない、ということだと思います。注文がサーバーに送信されるときに、価格値を正規化する必要があります。NormalizeDouble(Bid - MStop,4) の代わりに NormalizeDouble( (Bid- MStop),4)を実行します。