どんな新人の質問でも、フォーラムを乱雑にしないように。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 6. - ページ 810

 


ロボットがポジションを持ち、次のティックで損切りを前の安値に変更します。

void TrailingStop()
{  
  for(int i=0;i<OrdersTotal();i++)
  {
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true);
    {
    if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
      {  
      if (OrderType()==OP_BUY)             
        {              
            double LOW_1 = iLow(NULL,0,1);       
            bool res=OrderModify(OrderTicket(),OrderOpenPrice(),LOW_1,OrderTakeProfit(),0,White);                
            if(!res)  Print("Ошибка модификации ордера. Код ошибки=",GetLastError());         
        }               
       if (OrderType()==OP_SELL)              
        {                  
            double HIGH_1 = iHigh(NULL,0,1);                    
            res=OrderModify(OrderTicket(),OrderOpenPrice(),HIGH_1,OrderTakeProfit(),0,White);                
            if(!res)  Print("Ошибка модификации ордера. Код ошибки=",GetLastError());          
        }                      
      }
    } 
  }     
 return;                   
}
 

またはこのエラーを取り除くには


 
remjte:
皆さん!ポジションを開くのに十分なマージンがない場合、EAのテストを停止するコードを教えてください。ありがとうございました。
AccountFreeMarginCheck()がある値より小さい場合(例:AccountFreeMarginの50%未満)-取引関数を 終了、空のループはほとんどロードしないのでテストはすぐに終了します。
 
evillive:
AccountFreeMarginCheck()が特定の値(例えば、AccountFreeMarginの50%未満)より小さい場合 - 取引関数から終了、空のループはほとんどロードされていないため、テストはすぐに終了します。

正直なところ、まだ未熟なので、このようなコードを見つけたのですが、修正する方法を教えてください。

if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0.0) return (-1);
if(GetLastError()== 134/* NOT_ENOUGH_MONEY */) return (-2);
return (l_lots_4);

 
簡単に言うと、「新しいローソク 足が出るまで未決済注文を変更しない」という条件ですが、どのように書けばよいのでしょうか?
 
zhezheria:
この条件の書き方 - 新しいローソク足が表示されるまで、新規注文を変更しない。
対応する時間枠で新しいバーを 開く作業をする。豊富なコード例
 
remjte:

正直なところ、まだ未熟なので、このようなコードを見つけたのですが、修正する方法を教えてください。

if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0.0) return (-1);
if (GetLastError() == 134/* NOT_ENOUGH_MONEY */) return (-2);
return (l_lots_4);

編集する必要はなく、そのままで大丈夫です。変数を自分の名前に置き換えるだけなら別ですが。

しかし、より低いリスクを必要とする場合、 if (AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= AccountFreeMargin()*0.5) return (-1); - この場合、指定ロットでのポジション開設 後にフリーマネーが50%以下残っていれば、 return (-1) となります。

 
ヒントをお願いします。リストの2番目の注文が選択され、その後削除される(保留)コードの一部を記述する必要があります。OrderSelect(1, SELECT_BY_POS, MODE_TRADES) の場合、4051 を返します。
 
remjte:
皆さん!ポジションを開くのに十分なマージンがない場合、EAのテストを停止するコードを教えてください。
ありがとうございました。
      // проверяем доступность свободных средств
      if(AccountFreeMarginCheck(Symbol(),OP_BUY,OpenLot)<=0 || GetLastError()==134)
            {
               Print("It is impossible to open the order Buy, not enough money.");
               return(0);
            }
      // проверяем доступность свободных средств
      if(AccountFreeMarginCheck(Symbol(),OP_SELL,OpenLot)<=0 || GetLastError()==134)
            {
               Print("It is impossible to open the order Sell, not enough money.");
               return(0);
            }
doube OpenLot; // Лот который вы хотите открыть.
成行注文を出す前に挿入してください。
 
Pomid:
ヒントをお願いします。リストの2番目の注文が選択され、その後削除される(保留)コードの一部を記述する必要があります。OrderSelect(1, SELECT_BY_POS, MODE_TRADES) の場合、4051 を返します。
注文数は0から始まります。Try,OrderSelect(0, SELECT_BY_POS, MODE_TRADES)