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

 
законопослушный гражданин #:

前の雑誌と全く変わりません。

エラーも何もない

エラーはないはずなので、ログを表示します。
 
for(int i = 0; i <= OrdersTotal(); i++)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
            return(false);

ループにブラケットは必要ないのですか?1行以上ない場合のみ、不要なようです。

UPD:
ああ、わかった、一行だけだ。

 
MakarFX #:
エラーはないはずなので、ログを表示します。

MT4のログブックの最後のページです。

は、このログが必要ですか?

ファイル:
0w11cw.txt  30 kb
 
あ、すみません。比較と課題がごっちゃになった。もう大丈夫です。執筆のために席を立ってから、ずっと気が狂いそうだった。書き方が下手でストレスが溜まり、頭が全然働かない、もちろん分かってはいたのですが。
 
законопослушный гражданин #:

MT4のログブックの最後のページです。

は、このログが必要ですか?

以下は、過去ログでの回答です)

注文を開いた後の関数bCheckOrders()は、注文がないことを出すので、開きっぱなしになってしまう

 
pribludilsa #:
それに、頭が全然働かないんですよ、もちろんわかってはいたんですけど。

言い方が面白いですね)))

 
MakarFX #:

言い方が面白いですね)))

つまり、課題や比較の書き方は知っていても、とにかく混乱してしまったのです。混乱した。
 
pribludilsa #:
つまり、課題や比較の書き方は知っていても、やはり混乱してしまったのです。メチャクチャ。

そういうことじゃなくて...。

pribludilsa #:
頭が 全く働かない。もちろん分かってはいたのだが

 
MakarFX #:

以下は、過去ログでの回答です)

注文を開いた後のbCheckOrders() 関数では、注文がないことが判明し、開きっぱなしになってしまう

なんてこった、どこにそんなことが書いてあるんだ?

ログを正しく読んでいないのでしょうか?

注文を開始した後関数bCheckOrders() は、注文がないため開始を継続すると表示します - by void OnTick() - 私はこれが真実ではないことを理解しています。

注文が終了するまでbCheckOrders() - 注文がないことを知らせる ことはできません。

 
законопослушный гражданин #:

くそっ、どこに書いてあるんだ?

ログを正しく読んでいないのでしょうか?

注文を出した後の関数bCheckOrders() は、注文がないため、 void OnTick()によって、注文を出し続けるという ことを出しますが、これは真実ではないことを理解しています。

注文が終了するまでbCheckOrders() は注文がないことを示さないように する。

bCheckOrders() が正しく動作しない!

オーダーカウントのための関数はすでに書きました。

このようにすれば、うまくいくはずです。

bCheckOrders()の代わりに、次の関数を入れて ください。

//+------------------------------------------------------------------+
//| Подсчет открытых ордеров                                         |
//+------------------------------------------------------------------+
int CountOrders() 
  {
   int cnt=0;
   int i=OrdersTotal()-1;
   for(int pos=i;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol)
           {
            if(OrderMagicNumber()==Magic) cnt++;
           }
        }
     }
   return(cnt);
  }

そして、OnTick()の中で、bCheckOrders()の代わりに、次のように記述します。

//+------------------------------------------------------------------+
void OnTick()
  {
// Получим значение индикатора
   dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0.

// Если нет открытых ордеров, то входим в условие
   if(CountOrders()==0)
     {
// Если появился сигнал на покупку, то откроем ордер на покупку
      if(bSignalBuy() == true)
         vOrderOpenBuy();

// Если появился сигнал на продажу, то откроем ордер на продажу
      if(bSignalSell() == true)
         vOrderOpenSell();
     }
// Проверяем, вышел ли текущий баланс по открытому ордеру за вилку из внешних переменных CountLoss и CountProfit

  if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
     {
// Если да, то закроем ордер по текущей цене, не дожидаясь стопа или тейка
      CloseOrder();
     }
DrawLABEL("lab_Take",1,5,0,Color(GetProfitFromStart()>0,Lime,Red),StringConcatenate("Profit: ",DoubleToStr(GetProfitFromStart(),2),AC));
  }