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

 
novichok2018:

はい、ありがとうございます、ページを読みました。私のMKL4に関する知識は、私のループではポジションがゼロから最後へ、例ではその逆で最後からゼロへということに気づくのに十分だっただけです。どこに区切りを入れればいいのか、まだ わからない。ループをリバースにしたら、ポジションが全く閉じなく なった。

ポジションを閉じるときは、ポジションをスキップしないようにループを逆にする必要があります。このループではbreak演算子は不要で、ループの切れ目とその本体からの出口になります。必要なのはcontinue、つまり次のループ反復への移行です。

そして、なぜ閉じないのか、そのために何をしたのかは、あなただけが知っているのです。

 
Artyom Trishkin:

ポジションを閉じるときは、ループを逆にしてポジションを飛ばさないようにする必要があります。このループではbreak演算子は不要で、ループの本体から中断して抜けることになります。必要なのはcontinue、つまり次のループ反復への移行です。

なぜ閉じられないのか、そのために何をしたのか、それはあなただけが知っています。


説明書に忠実に従いました。以下は、修正したコードです。

void ClosePoz()
  { int total=OrdersTotal();
  if(total>0)
   {
      for(int i=OrdersTotal()-1;i>=0;i--)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {double WPR0 = iWPR(NULL,PERIOD_M5,bars,0);
         if(OrderType()==OP_BUY && MathAbs(WPR0)>80)
           OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,clrNONE);                  
         }
         continue;
      }
    } 
  } 
  

これで両方のポジションがクローズされましたが、片方はクローズされず、もう片方を待ちます。ナッツです。もしかしたら、ClosePoz() 関数を間違った場所に挿入してしまったのかもしれないと思いました。その結果、ゼロとなる。と叫んでいるのです。誰も解決できないなんてことはありえない。

 

元の口座(100ドル)を現金化する方法は?

 
novichok2018:

指示されたとおりにやった。以下は、修正したコードです。

これで両方のポジションがクローズされましたが、片方はクローズされず、もう片方を待ちます。こんなのおかしいよ。もしかしたら、ClosePoz() 関数を間違った場所に挿入してしまったのかもしれないと思いました。その結果、ゼロとなる。と叫んでいるのです。誰も解決できないなんてことはありえない。

わからない。膝の上に描きました。もちろん、私がチェックすることはできません。あなたの条件では不十分なので、自分でやってください。

//+------------------------------------------------------------------+
void ClosePoz(const string symbol_name,const int magic_number,const double wpr_buy,const double wpr_sell)
  { 
   int total=OrdersTotal();
   for(int i=total-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS))
        {
         ENUM_ORDER_TYPE type=OrderType();
         if(type>ORDER_TYPE_SELL)               continue;
         if(OrderMagicNumber()!=magic_number)   continue;
         if(OrderSymbol()!=symbol_name)         continue;
         int digits=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
         if(type==ORDER_TYPE_BUY)
           {
            double close_price=SymbolInfoDouble(OrderSymbol(),SYMBOL_BID);
            if(iWPR(NULL,PERIOD_M5,bars,0))>wpr_buy)
              {
               ResetLastError();
               if(!OrderClose(OrderTicket(),OrderLots(),close_price,slippage,clrNONE);
                  Print(__FUNCTION__" > Позиция Buy #",OrderTicket()," не закрыта. Ошибка: ",GetLastError());
              }
           }                
         else
           {
            double close_price=SymbolInfoDouble(OrderSymbol(),SYMBOL_ASK);
            if(iWPR(NULL,PERIOD_M5,bars,0))<wpr_sell)
              {
               ResetLastError();
               if(!OrderClose(OrderTicket(),OrderLots(),close_price,slippage,clrNONE);
                  Print(__FUNCTION__" > Позиция Sell #",OrderTicket()," не закрыта. Ошибка: ",GetLastError());
              }
           }                
        }
     }
  } 
//+------------------------------------------------------------------+
そして、チェックする機能内のWPRは、なぜか正常ではありません。WPRはクロージング機能呼び出しの 条件の一つであるべきである。
 
保留中の注文のロット数を変更することはできません。
 
igrok333:
保留中の注文のロット数を変更することはできないと理解しています。

必要な容量だけ、追加で開く。

 
Alekseu Fedotov:

欲しいボリュームがあるものだけ追加で開く

既存のものを削除して、新たに設定する方が簡単かもしれません。結局のところ、必要なボリュームはすでに配置されているものよりも大きくなくてもよいのです。そして、一つの命令に従う方が楽なのです。

 

Good day 私は質問があります、私はそれを理解する方法を説明します。

最も底で蝋燭を買い、最も上で蝋燭を販売する専門家の Advisors のための書かれたアルゴリズムがありますか。

どのようにEAに適応させるか?
 
iisvlg: 一番下に買いキャンドル、一番上に売りキャンドルを置くEAのための書かれたアルゴリズムとEAにそれを適応させる方法はありますか?

それは素晴らしいことです!

 
iisvlg:

Good day 私は質問があります、私はそれを理解する方法を説明します。

最も底で蝋燭を買い、最も上で蝋燭を販売する専門家の Advisors のための書かれたアルゴリズムがありますか。

また、それをどのようにEAに適応させるのでしょうか?

安値に買いリミット、高値に売りリミットを置く。

アルゴリズムについて、ベースを 掘る