MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 528

 
Alexey Viktorov:

ただ、それだけです。

ありがとうございます!ちょうどいい感じです

 

こんにちは。

この問題についてアドバイスをお願いします。

保留中の注文を 出す。

bool send1=OrderSend(Symbol(),OP_BUYSTOP,Lots,Price,3,SL,TP,NULL,MagicNumber,0,clrGreen);

そして、オープンした後にトレーリングストップをかけるようにしています。

 {
 for(int i=0; i<OrdersTotal(); i++) 
  {
  if(OrderSelect(i,SELECT_BY_POS))
  if(OrderSymbol()==Symbol()||OrderMagicNumber()==MagicNumber)
  if(OrderType()==OP_BUY)
   {
  if(TrailingStop>0)  
    {                 
  if(Bid-OrderOpenPrice()>TrailingStop)
     {
  if(OrderStopLoss()<Bid-TrailingStop)
      {
     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop,OrderTakeProfit(),0,clrRed);
      }
     }
    }
   }
  }
 }

オープン後、注文はOP_BUYになりますか?この場合、なぜトレイリングが効かないのか、そのコツは?

 
YanSay:

こんにちは。

この問題についてアドバイスをお願いします。

保留中の注文を 出す。

そして、オープンした後にトレーリングストップをかけるようにしています。

オープン後、注文はOP_BUYになりますか?この場合、なぜトレイリングが効かないのか、そのコツは?

100500の理由。まず明らかなのは、Bid-TrailngStopが正規化されていないことです。さらにストッパーレベルに近づいて、しかも不透明になる可能性もあります。
 
YanSay:

こんにちは。

この問題についてアドバイスをお願いします。

保留中の注文を 出す。

そして、オープンした後にトレーリングストップをかけるようにしています。

オープン後、注文はOP_BUYになりますか?この場合、なぜトレイリングが効かないのか、そのコツは?

TrailingStopをpipsで表すと? Pointを掛けると。
 

質問を間違えてしまいました、すみません。文脈から取り出される。

特にトレイリングコードをテストするために、取引は開いたが、トレイリングが動作しません、私はそれを回す方法はありません、膠着状態(

//Вводные
#define  MagicNumber 150
double SL=0;                        //Stop Loss
input int Trailing=100;             //Трэйлинг

//Код

void OnTick()
{
 if (OrdersTotal()==0)
 {
   if(TimeCurrent()>StrToTime("17:59")&&TimeCurrent()<StrToTime("18:01"))
  {
SL = Low[1]-Point; //Стоп лосс
bool send1=OrderSend (Symbol(), OP_BUY,1,Bid,30,SL,0,NULL,MagicNumber,0,clrNONE);
  }
 }
 if (OrdersTotal()>0)
   {
      for (int i=0; i<OrdersTotal (); i++)
    {
   bool select1=OrderSelect (i, SELECT_BY_POS);
   if (OrderMagicNumber() == MagicNumber && OrderSymbol () == Symbol())
     {
   if (OrderType()==OP_BUY)
      {
     if (NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(Trailing,Digits))
     bool modify1=OrderModify (OrderTicket(),0,Ask-Trailing,OrderTakeProfit(),0,CLR_NONE);
      }
     }
    }
   }
}
 
YanSay:

質問を間違えてしまいました、すみません。文脈から取り出される。

特にトレイリングコードをテストするために、取引は開いたが、トレイリングが動作しません、私はそれを回す方法はありません、膠着状態(

上記のご質問にお答えします。
 
Vladislav Andruschenko:
上記のご質問にお答えします。
ありがとうございました!助かりました。
 
YanSay:
ありがとうございました!助かりました。

まだそこに問題があるんですね。

ループが順方向になっていますが、逆方向であるべきです。順方向では、トロールで片方が閉じた後にポジションがスキップされます

ストップ距離(StopLevel)のチェックはありません。ストップが許容される最小距離よりも価格に近い場合、修正エラーが 発生します(フローティングスプレッドについて忘れないでください)。

もしかしたら、すでに言われていることなので、一応、他のもの-斜めに見た-もあるかもしれません。

ZS.もう一度見た。

if (NormalizeDouble(Ask-OrderStopLoss(),Digits)>NormalizeDouble(Trailing,Digits))

というのは、両方の値を正規化した上でチェックすると、その結果が再び正規化されないという、正規化によるチェックの意味そのものを欠くようなチェックになってしまうからです。

2つのダブル値の正規化された差を 確認する必要があります。正規化された2つの値を比較することになります。

 
Artyom Trishkin:

まだそこに問題があるんですね。

ループは順方向です。逆方向でなければなりません。順方向のループでは、トロールの1つが閉じた後、ポジションがスキップされます

ストップ距離(StopLevel)のチェックはありません。ストップが許容される最小距離よりも価格に近い場合、修正エラーが 発生します(フローティングスプレッドについて忘れないでください)。

もしかしたら、すでに言われていることなので、一応、他のもの-斜めに見た-もあるかもしれません。

ZS.もう一度見た。

というのは、両方の値を正規化した上でチェックすると、その結果が再び正規化されないという、正規化によるチェックの意味そのものを欠くようなチェックになってしまうからです。

2つのダブルバリューの差を正規化 したものを確認する必要があります。正規化された2つの値を比較することになります。

こんな感じ?

for (int i = OrdersTotal() - 1; i >= 0; --i)
if (NormalizeDouble((Ask-OrderStopLoss()>Trailing*Point),Digits))
 
the size of local variables is too large (more than 512 kb)
このエラーは何を意味するのでしょうか?


2つのオブジェクトを持つ関数があります。

bool              CheckCandleOneRules(CCandlePropertiesBase *candle,
                                      CCandleRule *rule,
                                      int dir);

あるクラスは4000以上のフィールド(ほとんどがenum)を持つ構造を持っています。

このエラーはどうしたらいいのでしょうか?