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

 
Vitaly Muzichenko:
はい、その通りです。ただ、コードがこのようなスタイルで書かれているため、前の発言者が誤解してしまったのです。

そして、確認することは?

//+------------------------------------------------------------------+
//|                                                   TestLogics.mq4 |
//|              Copyright 2016, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
#property strict
#property script_show_inputs
//--- input parameters
input int      Value=0;    // Количество имеющихся ордеров
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   if(Value>0) Alert("1. Количество ордеров=",Value);
   else Alert("2. Это код после else");
      {
      Alert("3. Ордера отсутствуют");
      }
  }
//+------------------------------------------------------------------+
中括弧の中のコードはif-elseの条件には関係なく、Valueの値に関係なく常に実行されます。
 
Artyom Trishkin:

そして、それを確認する?


中括弧の中のコードはif-elseの条件には関係なく、Valueの値に関係なく常に実行されます。

ゲッ、ホントだ、今改めて元のコードを見直してみたら、間違っていた。文体がなんだか曲がっていて、戸惑いました。

 

再確認し、"extra "を削除しました。

ゼロの割り算は、どこへも行かない

ファイル:
zero.mq4  5 kb
 
trader781:

再確認し、"extra "を削除しました。

ゼロの割り算は、どこへも行かない

 
trader781:

再確認し、"extra "を削除しました。

ゼロによる除算は消えて いない

なぜなら、除数が0と異なるかどうかのチェックがないからです。注文がなく、ロットが0であるときに、さらにコードを実行する意味があるのでしょうか?

 

チェックを入れる

void ModifyOrders()
  {
   double avg_price=0;
   price=0;
   bool z=true;
   double orderlots=0;

   for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
      && (OrderMagicNumber()==Magic) && (OrderType()==FindLastOType()))
        {
         price+=OrderOpenPrice()*OrderLots();
         orderlots+=OrderLots();
        }
     }
    
   if(orderlots==0) { return; } // если ничего нет - выходим
   avg_price=NormalizeDouble(price / orderlots,Digits);
  
   if(FindLastOType()==OP_BUY)     tp=NormalizeDouble(avg_price+TakeProfit*Point(),Digits);
   if(FindLastOType()==OP_SELL)    tp=NormalizeDouble(avg_price-TakeProfit*Point(),Digits);


   for(i=OrdersTotal()-1; i>=0; i--)
     {
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) && (OrderSymbol()==Symbol())
      && (OrderMagicNumber()==Magic) &&(OrderType()==FindLastOType()))

         z=OrderModify(OrderTicket(),OrderOpenPrice(),0,tp,0);
         if (!z)
         Print("Ошибка функции модифицирования");
     }
  }
 
Vitaly Muzichenko:

チェックを入れる


ヴィタリー・ポストラッシュ


でも、ロットは見逃した。ありがとう。
 
trader781:
でも、ロットは外しました、ありがとうございました。
見逃してもいい、日誌を読まない のはダメ、全部書いてある、どの行が間違っているのか書いてある。
 
Vitaly Muzichenko:
見逃してもいい、雑誌を読まなくても いい、そこに全部書いてある。

読むつもりはなかったんです。マーケットで確認する』と書いてある。私の製品は決して市場に出ることはない。

ゼロで割ることについて

上のはどうですか?そこから 先は想定内です。

{
price+=OrderOpenPrice()*OrderLots()です。
orderlots+=OrderLots()。
}
}

if(orderlots==0) {return; }// 何もなかったら終了
avg_price=NormalizeDouble(price / orderslots,Digits);

if(FindLastOType()==OP_BUY) tp=NormalizeDouble(avg_price+TakeProfit*Point(),Digits);
if(FindLastOType()==OP_SELL) tp=NormalizeDouble(avg_price-TakeProfit*Point(),Digits);

 
trader781:
読むつもりはなかったんです。市場でテストすること」と書いてあります。私の製品は決して市場に出回ることはない。

テスターのマガジンの話です

追記:コードを正常な状態に組み立て、修正した後、テスターで実行し、ログのエラーを読み取る。ここでコードの切れ端を渡すんですね。