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

 
Zvezdochet:

はい。まさに、セルゲイ・コバレフの教科書のような存在だ。今、たくさん欠けているものです。

このサイトには、このようなmql5の教科書はありません、他は知りませんが。しかし、多くの記事があります、それらを読んで、あなたは成功するかもしれません。

Статьи по MQL5
Статьи по MQL5
  • www.mql5.com
Статьи по программированию на языке MQL5
 

プログラマーの皆さん!

1ヶ月間悩んでいる問題を解決してください。

私のTSは、なぜかオーダーを閉じないことがあります

こんな感じです。

最初の3つの注文、44329646、44330563、44337351は問題なくオープンしクローズします。

そして、4順目で悲劇が起こる。

などなど、無限大に...。

つまり、Expert Advisorが注文44339156をオープンし、数時間前に自分自身(!!)が成功裏にクローズした注文44337351をクローズしようとした場合です。

手動で閉じる必要があり、それを怠ると、時として最も深いドローダウンに悩まされることになる。なんという災難でしょう。

なぜ、そんなことが可能なのか?

Expert Advisorのコードは非常にシンプルです。

здесь - условие открытия сделки
{
         RefreshRates();
         total_orders_NZDUSD=TotalOrders("NZDUSD.I");
         if(total_orders_NZDUSD==0)
         {
         Balance=AccountBalance();
         Lots=NormalizeDouble((Balance/(Ask*10.0))*0.01,2);
         double AskNorm=NormalizeDouble(Ask,Digits);
         ticket_buy_NZDUSD=OrderSend("NZDUSD.I",OP_BUY,0.01,AskNorm,0,0,0);
         }
      }
здесь - условие закрытия сделки
      {
         RefreshRates();
         if(OrderSelect(ticket_buy_NZDUSD, SELECT_BY_TICKET)==true)
         {
         total_orders_NZDUSD=TotalOrders("NZDUSD.I");
         ctm_ticket_buy_NZDUSD=OrderCloseTime();
         order_type_NZDUSD=OrderType();
            if(total_orders_NZDUSD>0)
            {
               if(ctm_ticket_buy_NZDUSD==0)
               {
                  if(order_type_NZDUSD==OP_BUY)
                  {
                  double BidNorm=NormalizeDouble(Bid,Digits);
                  OrderClose(ticket_buy_NZDUSD,0.01,BidNorm,0);
                  }
               }
            }
         }

1つの同じプログラムが、どうして「何度も」使えるのか?理解できない...

 
Alexander_K2:

プログラマーの皆さん!

1ヶ月間悩んでいる問題を解決してください。

私のTSは、なぜかオーダーを閉じないことがあります

こんな感じです。

最初の3つの注文、44329646、44330563、44337351は完璧にオープンしクローズしています。

そして、4順目に悲劇が起こる。

などなど、無限大に...。

つまり、Expert Advisorが注文44339156をオープンし、数時間前に自分自身(!!)が成功裏にクローズした注文44337351をクローズしようとした場合です。

手動で閉じる必要があり、それを怠ると、時に最も深いドローダウンに悩まされることになる。なんという災難でしょう。

なぜ、そんなことが可能なのか?

Expert Advisor のコードは非常にシンプルです。

1つの同じプログラムが、どうして「何度も」使えるのか?理解できない...

OrderSelect() のヘルプをご覧ください。特に、チケットによる選択に関するリファレンスをお読みください。クローズドオーダーでもチケットで選択されます。すでに閉じているのに、もう一度閉じようとしている。

0の場合、まだ市場に残っていることを意味し、それを閉じます。> 0の場合、すでに閉じられたことを意味し、再度キックする必要はなく、生き返ることはなく、閉じません。

 
Artyom Trishkin:

OrderSelect()のヘルプをご覧ください。特にチケットによる選択について。クローズドオーダーでもチケットで選択されます。すでに閉じているのに、もう一度閉じようとしている。

選択されている場合、終了時間を確認します - 0の場合、まだ市場にあることを意味します - それを閉じます、> 0の場合、それはすでに閉じられたことを意味し、あなたは再びそれをキックする必要はありません - それは生き返らず、閉じません。

ありがとうございました。

 
Alexander_K2:

ありがとうございました。

どういたしまして。やってみないとわからない、やってみないとわからない...。

 
Artyom Trishkin:

お願いします。やってみないとわからない、やってみないとわからない...。

Artemさん、ヘルプを読みましたが、すべて正しいようです。

ctm_ticket_buy_NZDUSD=OrderCloseTime();
         ...
               if(ctm_ticket_buy_NZDUSD==0)
            ...

閉店時間を確認しているところです。

MQL4リファレンスで読んだことがあります。

最新の注文データを呼び出す直前にOrderSelect()関数を 呼び出すことを推奨します。

これもまた事実です。

では、何が問題なのか?

 
Alexander_K2:

Artemさん、ヘルプを読みましたが、すべて正しいようです。

閉店時間を確認しているところです。

MQL4リファレンスで読んだことがあります。

新しい注文データを呼び出す直前にOrderSelect()関数を 呼び出すことを推奨します。

これもまた事実です。

では、どうしたのでしょうか?

どのような機能なのでしょうか?

total_orders_NZDUSD=TotalOrders("NZDUSD.I");
また、作業後、どの順番で割り振られるのでしょうか?
 
Alexander_K2:

プログラマーの皆さん!

1ヶ月間悩んでいる問題を解決してください。

私のTSは、なぜかオーダーを閉じないことがあります

こんな感じです。

最初の3つの注文、44329646、44330563、44337351は問題なくオープンしクローズします。

そして、4順目に悲劇が起こる。

などなど、無限大に...。

つまり、Expert Advisorが注文44339156をオープンし、数時間前に自分自身(!!)が成功裏にクローズした注文44337351をクローズしようとします。

手動で閉じる必要があり、それを怠ると、時に最も深いドローダウンに悩まされることになる。なんという災難でしょう。

なぜ、そんなことが可能なのか?

Expert Advisor のコードは非常にシンプルです。

1つの同じプログラムが、どうして「何度も」使えるのか?理解できない...

オーダー配列はどのような方向から見ていますか?

改訂」時に閉鎖・削除の可能性がある場合は、逆方向を見た方が良い。OrdersTotal()-1 から 0 まで(0 を含む)。

そうでないと、踏んでしまう可能性があります :-)


 
Artyom Trishkin:

この機能は何ですか?

この特集は、Goldtrader社の好意により提供されたものであり、心から感謝している。

//+------------------------------------------------------------------+
//| Calculate Market Orders function                                 |
//+------------------------------------------------------------------+
int TotalOrders(string sy) {    // sy - Currency Pair
int orders=0;
   for (int i=0; i<OrdersTotal(); i++) {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
        if (OrderSymbol()==sy) {
           if (OrderType()==OP_SELL || OrderType()==OP_BUY) {
             orders++;
           }
         }
       }
     }
return(orders);
}

異なる通貨ペアで同時に注文を出すことが可能です。

:)))私見ですが、1ヶ月ほど前に有効化したのが全ての始まりだと思いますので...。それなしには、私は聖杯を 見ることができません。

何か問題があるのでしょうか?

 

でも、何かすごく変なんです...。

つまり、OrderSelectを 一度やって、関数からもう一度...ということです。意味がない...。