複数注文の問題 - ページ 4

 
luisneves:

Kroninさん、こんにちは。

あなたの改造はうまくいっています。注文の最大数を制限していますが、代わりにすべてクローズすることは可能でしょうか?

私は以下のコードでそれをしようとしましたが、うまくいかないようです。

よろしくお願いします。

ルイス

うーん、何を言っているのかよくわからないのですが...。
最後の注文(MaxOrdersが7に設定されている場合は注文7)をオープンする代わりに、すべての注文をクローズするということでしょうか?

MaxOrdersに到達するまで待って、すぐにすべてをクローズしたくないのは確かです。最後の注文は、ほとんどの場合(またはすべての場合)損失で終わるでしょう。
Btw.スプレッドコントローラについての PMを見ましたか?

 
kronin:

うーん、私はあなたが何を意味するのか理解していない確信しています...
最後の注文(MaxOrdersが7に設定されている場合は注文7)を開く代わりに、すべての注文を閉じるということでしょうか?

MaxOrdersに到達するまで待って、すぐにすべてをクローズしたくないのは確かです。最後の注文は、ほとんどの場合(またはすべての場合)損失で終わるでしょう。
Btw. スプレッドコントローラについてのPMを見ましたか?


こんにちは、Kroninさん。

早速のご回答ありがとうございます。

n個の注文(MaxOrders)のピンポンサイクルの後、すべてのオープンオーダーがクローズされるべきであると言う、私はそれが意味をなさないかもしれないことを知っているが、そうであっても。

IsContextBusy () Sleep (10) のコードが既にあるので、失敗した場合の注文を再入力するコードを含めようとしているのですが、それが意味をなすのか疑問があります。私の理解では、「サーバーがビジー状態か、プラットフォーム内の他のEAが通信を試みている場合、10ミリ秒待って再試行 する」という意味です。ということは、EAはチケットを受け取るまでこの動作を維持する、ということでしょうか?

PMの問題ですが、その場合、週末にTestを利用しないか、プラットフォームがオフラインの状態で行う方が良いですね...。

5行目を挿入しましたが、1行目がすでにそうなっているので、その必要はないと思いますが、正しいでしょうか?

int LastClosedTicket=GetTicketFromHistory(Symbol(),MagicNumber); //1 
   if(LastClosedTicket>0)
    {                                                                 
      Print("LastClosedTicket=",LastClosedTicket);                   
      if(OrderSelect(LastClosedTicket,SELECT_BY_TICKET))
      {
      if(OrderSymbol()== Symbol() && OrderMagicNumber()== MagicNumber) //5           
       {            
         if(OrderType()==OP_BUY)
         {
         BuyAllowed=false;SellAllowed=true;
         } 
         else                   
         {
         BuyAllowed=true;SellAllowed=false;
         } 
        }   
      }
    }             
  return(0);   
  }
 
  //+---------------------------------------------------------------------------+

もう一つの問題。

コードの次の部分で sym と mn がある太字の行は、1 つ Symbol() と MagicNumber でそれを置き換える必要がありますか?

GetTicketFromHistory

int GetTicketFromHistory(string sym,int mn,int orderposinhistory=0)// <------------------------Should replace sym and mn with Symbol () and MagicNumber ?
 {
   bool debug=false;
   if(debug)Print("Orders in history: ", OrdersHistoryTotal());
   int ticket,count=1,i;
   datetime orderclosedates[];
   for(i=OrdersHistoryTotal()-1;i>=0;i--)
   {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))continue;
      if(debug)Print("OrderSymbol: ",OrderSymbol(),"; OrderMagicNumber: ",OrderMagicNumber(),
                     " ;OrderType: ",OrderType(),"; OrderTicket: ",OrderTicket(),
                     "; OrderCloseTime: ",TimeToStr(OrderCloseTime()),";"); 
      if((OrderMagicNumber()  ==mn) // <---------------------------------------------------------Should replace  mn with  MagicNumber ?
         &&(OrderSymbol()     ==sym)// <---------------------------------------------------------Should replace sym with Symbol () ?
         &&(OrderType()==OP_BUY||OrderType()==OP_SELL))
         {                       
         ArrayResize(orderclosedates,count);
         orderclosedates[count-1]=OrderCloseTime();
         count++;

ここで、私はあなたのアドバイスに従って、次のコードでフィルタを挿入しています。

(//Phil:

/ /注文の総量を確認してください。私は、マーケット、マジック、シンボルのフィルターを追加します...//<-----------マーケットフィルターの意味がよくわかりません...。(フィル:成行注文、未決済注文 なし)

//しかし、私は今、怠惰です......それはあなたがするためのものです。

ということでよろしいでしょうか?

int start()
 {//0 
                                         
  OTLastTick = OTCurrentTick;                      
  OTCurrentTick = OrdersTotal();
     if(OrderSymbol() == Symbol()           //<--------filter for symbol and magic number, but for market (suppose market orders can't understand how....)
      && OrderMagicNumber() == MagicNumber) //<-|
     if(OTCurrentTick == 0 && OTLastTick > 0)
      {
      BuyTrigger = Ask + OpenDistance * pt;
      SellTrigger = Bid - OpenDistance * pt;
      }             
     if(OTCurrentTick >0 )Trail();                   
     if(OTLastTick >= 2                     //<------could you comment the meaning of this line ?                            
     &&OTCurrentTick < OTLastTick
     && OTCurrentTick > 0)
     {
      CloseAllOnSL();return;
     }      
     if(OTCurrentTick >= MaxOrders)return;                                                            
     if(OTCurrentTick > 0)OpenOppositeOrder();                        
     if(OTCurrentTick == 0)
     {
      BuyAllowed = true;
      SellAllowed = true;


よろしくお願いします。

ルイス

 

機能の 使い方については、私はコメントしません。RaptorUKはすでに数記事前にそれをしました。もう一度読んで、なぜ与えられたコードで何も変更する必要がないのか理解してください。さらに言えば、なぜ他のEAでそのまま使えるのかを理解してください。

OrdersTotal()は、注文の量を返します。おそらく、注文があなたのEAに属しているのか、マニュアル取引に属しているのか、注文が保留されているのか、それともすでにマーケットで注文されているのかを知りたいと思うことでしょう。私なら、EAが作成した注文の量を返す関数(int)を作成します。

if(OTLastTick >=2 //<------can you comment the meaning of this line ?
もし、開いている注文が1つだけ(2つ以下)なら、CloseAllOnSL関数を呼ぶのは意味がありません・・・唯一開いている注文は、明らかにストップアウトされていないのですから。

 
kronin:

機能の使い方については、私はコメントしません。RaptorUKはすでに数記事前にそれをしました。もう一度読んで、なぜ与えられたコードで何も変更する必要がないのか理解してください。さらに言えば、なぜ他のEAでそのまま使えるのかを理解してください。

OrdersTotal()は、注文の量を返します。おそらく、注文があなたのEAに属しているのか、マニュアル取引に属しているのか、注文が保留されているのか、それともすでにマーケットで注文されているのかを知りたいと思うことでしょう。私は、EAが作成した注文の量を返す関数(int)を作成します。

if(OTLastTick >=2 //<------この行の意味をコメントしていただけませんか?
もし、開いている注文が1つだけ(2つ以下)なら、CloseAllOnSL関数を呼び出す意味がありません...唯一の開いている注文は、明らかにストップアウトしていません。


Kroninさん、こんにちは。

私の問題にご回答いただき、ありがとうございました。

RaptorUKのアドバイスと同様に、あなたのコードに最も注意を払うつもりです。

よろしくお願いします。

Luis

 

Kroninさん、こんにちは。

2つのEAを使用した場合の問題が出てきました。私は2つのEAを異なるチャートと異なるマジックナンバーで置くと、彼らは同時に動作しません。私はuninitの理由5としてエラーを受信しますが、フォーラムで見てみると、その問題に対処するために正しい方向に私を置く情報を見つけることができません。

何か補足する情報はありますか?

ベストリーダ

ルイス

 
luisneves:

Kroninさん、こんにちは。

2つのEAを使用した場合の問題が出てきました。2つのEAを異なるチャートと異なるマジックナンバーで配置すると、同時に動作しません。uninit reason 5というエラーが出ます。

https://docs.mql4.com/constants/uninit
 

RaptorUKさん、こんにちは。

早速のご回答ありがとうございます。

提供されたリンクの中で、私は見つけました。

reason_parameters5入力パラメータは、ユーザーによって変更されました。

しかし、この情報では何もできません(私の知る限り)。どのような入力パラメータが変更されたのか理解できません。EAは同じで、他のEAとの競合を避けるためにマジックナンバーを変更しただけです。

ところで、あなたがここにいたら、次のコードで1がチケットを受信していない間、再び送信された注文を取得するコードを導入しなければならないかどうかを教えてくださいクローズ注文のための同じ?

while(IsTradeContextBusy()) Sleep(10);
          RefreshRates();       
                       
     BuyTicket=OrderSend(Symbol(),OP_BUY,LotSize,Ask,RealSlippage,0,0,"Buy Order",MagicNumber,0,Green);
     if(BuyTicket > -1)

最高のよろしく

ルイス

 
luisneves:

RaptorUKさん、こんにちは。

早速のご回答ありがとうございます。

提供されたリンクの中で、私は見つけました。

reason_parameters5入力パラメータは、ユーザーによって変更されました。

しかし、この情報では何もできません(私の知る限り)。どのような入力パラメータが変更されたのか理解できません。EAは同じで、他のEAとの競合を避けるためにマジックナンバーを変更しただけです。

もし、Magic Numberを変更した場合 ... ... ...

extern int    MagicNumber    = 08012013;

もし、Magic Numberを変更し、それがexternであれば、パラメータを 変更したことになり、EAが再起動し、reason 5が表示されます。

もし、複数のペアでEAを動かしたいなら、2つのことをすることをお勧めします。 まず、EAを1つのペアで正しく動作させ、完全にテストし、動作していることを確認します。 次に、他のEAが同じことをしようとしていないときにあなたのトレードが処理されるようにミューテックスを導入することです。

 
RaptorUK:

マジックナンバーを変更した場合 ... ...

......を変更し、それがexternである場合、あなたはパラメータを変更した、EAは再起動し、理由5を与えます。

もし、複数のペアでEAを動かしたいなら、2つのことをすることをお勧めします。 まず、EAを1つのペアで正しく動作させ、完全にテストし、動作していることを確認します。 次に、他のEAが同じことをしようとしていないときにあなたのトレードが処理されるようにミューテックスを導入することです。


こんにちは、RaptorUk。

エラーについてのご回答ありがとうございました。

再入力注文についての他の問題については、それはタイムアウトとしてエラーを返した注文の閉鎖に失敗したことに関係しています。

よろしくお願いします。

ルイス

 
luisneves:


RaptorUkさん、こんにちは。

エラーについてご回答いただきありがとうございます、私は名前とマジックナンバーを変更し、プラットフォームを閉じることなく、チャートに2番目の電子を入れたと思います。

再入力注文についての他の問題については、それはタイムアウトとしてエラーを返した注文の閉鎖に失敗したことに関係しています。

よろしくお願いします。

ルイス

実行エラーコードに 目を通して、あなたのコードをそこに与えられた情報に準拠させてください、例えば.

err_trade_timeout128トレードのタイムアウトに達しました。再試行する前に(少なくとも 1 分間)、取引操作が本当に成功していないことを確認する必要があります(新しいポジションが開設されていないか、既存の注文が変更または削除されていないか、既存のポジションが閉じられていないか)。