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

 
Andrey Sokolov #:

24時間記憶しているのか?

いいえ。まだ、必要なものを実装する方法が見つかっていませんが、もしかしたら、2回目のイテレーションで手に入るかもしれません;-)
 
DanilaMactep #:
いいえ。まだ、必要なものを実装する方法が見つかっていませんが、2回目のイテレーションで実装できるかもしれません;-)

マキシム・クズネツォフがその方法を教えてくれた。読まれましたか?

 

注文を間違って決済してしまう問題を解決するために、よろしくお願いします。

プラスの利益が得られると、エキスパートアドバイザーはオーダーグリッドの最初と最後のオーダーをクローズします。

デモ 口座では問題ないが、リアル口座では最後から2番目の注文だけがクローズされる。私は、注文のグリッド全体を閉じなければならないときにそのような問題に直面し、問題はrequotesにありました、その後、フラグが設定され、問題は解決されます。ここで私も同じことをしましたが、問題は解決していません。

フラグです。

int flag_close3=0;
//-------------------------------------------------------------------+  Команда на закрытие мин макс и предпоследнего ордеров в сетке профит = 0
   if(CalculiteProfitMinMaxPenultimateOrders() >= 0 && Drawdown >= DrawdownClosingMinMaxOrdersZero && FindPenultimateProfit() > 0)
     {
       flag_close3=1;
     }
//-------------------------------------------------------------------+  Флаг на закрытие  ордеров
   if(flag_close3==1)
      ClosseMinMaxPenultimateOrdersZero();
//+----------------------------------------------------------------------------+
//| Закрытие минимального максимального и предпоследнего ордеров профит = 0    |
//+----------------------------------------------------------------------------+
void  ClosseMinMaxPenultimateOrdersZero()
  {
   int slipp = (int) MarketInfo(_Symbol,MODE_SPREAD)*2;
   for(int i = OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_BUY)
              {
               if(CalculiteProfitMinMaxPenultimateOrders() >= 0  && Drawdown >= DrawdownClosingMinMaxOrdersZero && FindPenultimateProfit() > 0)
                 {
                  if(OrderClose(GetTicketPenultimateOrder(), FindPenultimateLots(), Bid, slipp) && OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) &&
                     OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp))
                    {
                     SendNotification("Закрылся минимальный максимальный и предпоследний ордера на покупку: " + Symbol() + ", Баланс: " + DoubleToString(NormalizeDouble(AccountBalance(), 2))
                                      + ", Свободно денежных средств: " + DoubleToString(NormalizeDouble(AccountFreeMargin(), 2)));
                     Print("Максимальный и минимальный ордера на покупку успешно закрыты!");
                    }
                  else
                    {
                     Print("Не удалось закрыть максимальный и минимальный ордера на покупку!",GetLastError());
                    }
                 }
              }

            if(OrderType() == OP_SELL)
              {
               if(CalculiteProfitMinMaxPenultimateOrders() >= 0 && Drawdown >= DrawdownClosingMinMaxOrdersZero && FindPenultimateProfit() > 0)
                 {
                  if(OrderClose(GetTicketPenultimateOrder(), FindPenultimateLots(), Ask, slipp) && OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) &&
                     OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp))
                    {
                     SendNotification("Закрылся минимальный максимальный и предпоследний ордера на продажу: " + Symbol() + ", Баланс: " + DoubleToString(NormalizeDouble(AccountBalance(), 2))
                                      + ", Свободно денежных средств: " + DoubleToString(NormalizeDouble(AccountFreeMargin(), 2)));
                     Print("Максимальный и минимальный ордера на продажу успешно закрыты!");
                    }
                  else
                    {
                     Print("Не удалось закрыть максимальный и минимальный ордера на продажу!",GetLastError());
                    }
                 }
              }
           }
        }
     }
  }

ありがとうございます!!!!

 
EVGENII SHELIPOV デモ 口座では問題ないが、リアル口座では最後から2番目の注文だけがクローズされる。私は、注文のグリッド全体を閉じなければならないときにそのような問題に直面し、問題はrequotesにありました、その後、フラグが設定され、問題は解決されます。ここで私も同じことをしましたが、問題は解決していません。

フラグです。

ありがとうございます!!!!

旗はどこでリセットされるのですか?
 
Tretyakov Rostyslav #:
旗はどこでリセットされるのですか?
//-------------------------------------------------------------------+  Команда на удаление линий отображающую среднюю цену и текста
   if(CountTrade() == 0)
     {
      flag_close=0;
      ObjectsDeleteAll(0,"AveragePriceLine");
      if(ObjectFind(0,"signal4")==0 && CountTrade(0) < 1)//для бай
        {
         ObjectDelete(0,"signal4");
        }
      if(ObjectFind(0,"signal3")==0 && CountTrade(1) < 1)//для селл
        {
         ObjectDelete(0,"signal3");
        }
     }

ここに入れたら正解なんだろうけど

 
EVGENII SHELIPOV #:

ここに入れれば、正しいことになる。

いいえ、この方法では、すべての注文が終了した時点でリセットされます。

すべての注文をクローズする必要がないことを考えると、チケットを再実行し、クローズするのがよいでしょう。

 
Tretyakov Rostyslav #:

いいえ、この方法では、すべての注文が終了した時点でリセットされます。

すべての注文をクローズする必要がないことを考えると、チケットを再実行し、クローズする方がよいでしょう

ちょっと待ってください。

 
EVGENII SHELIPOV #:

ちょっと待ってください。



//-------------------------------------------------------------------+  Команда на удаление линий отображающую среднюю цену мин и макс ордеров и текста
   if(CountTrade() == 0 || Drawdown < DrawdownClosingMinMaxOrdersZero)
     {
      flag_close2=0;
      flag_close3=0;
      ObjectsDeleteAll(0,"AveragePriceLineMinMaxOrders");
      if(ObjectFind(0,"signal41")==0 && (CountTrade(0)<1 || Drawdown < DrawdownClosingMinMaxOrdersZero)) //для бай
        {
         ObjectDelete(0,"signal41");
        }
      if(ObjectFind(0,"signal42")==0 && (CountTrade(1)<1 || Drawdown < DrawdownClosingMinMaxOrdersZero))//для селл
        {
         ObjectDelete(0,"signal42");
        }
     }

が、このように

 
Tretyakov Rostyslav #:

いいえ、この方法では、すべての注文が終了した時点でリセットされます。

すべての注文をクローズする必要がないことを考慮し、チケットをループしてクローズするのがよいでしょう。

クローズオーダー機能でテロップを通さないのですか?

//+----------------------------------------------------------------------------+
//| Закрытие минимального максимального и предпоследнего ордеров               |
//+----------------------------------------------------------------------------+
void  ClosseMinMaxPenultimateOrders()
  {
   int slipp = (int) MarketInfo(_Symbol,MODE_SPREAD)*2;
   for(int i = OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
           {
            if(OrderType() == OP_BUY)
              {
               if(CalculiteProfitMinMaxPenultimateOrders() >= 0 && OrderGroupCloseSignal()==0 &&
                  Drawdown >= DrawdownClosingMinMaxOrders && FindPenultimateProfit() > 0)
                 {
                  if(OrderClose(GetTicketPenultimateOrder(), FindPenultimateLots(), Bid, slipp) && OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Bid, slipp) &&
                     OrderClose(GetTicketMaxOrder(), FindLastLots(), Bid, slipp))
                    {
                     SendNotification("Закрылся минимальный максимальный и предпоследний ордера на покупку: " + Symbol() + ", Баланс: " + DoubleToString(NormalizeDouble(AccountBalance(), 2))
                                      + ", Свободно денежных средств: " + DoubleToString(NormalizeDouble(AccountFreeMargin(), 2)));
                     Print("Максимальный и минимальный ордера на покупку успешно закрыты!");
                    }
                  else
                    {
                     Print("Не удалось закрыть максимальный и минимальный ордера на покупку!",GetLastError());
                    }
                 }
              }

            if(OrderType() == OP_SELL)
              {
               if(CalculiteProfitMinMaxPenultimateOrders() >= 0 && OrderGroupCloseSignal()==1 &&
                  Drawdown >= DrawdownClosingMinMaxOrders && FindPenultimateProfit() > 0)
                 {
                  if(OrderClose(GetTicketPenultimateOrder(), FindPenultimateLots(), Ask, slipp) && OrderClose(GetTicketMinOrder(), GetMinLotOrder(), Ask, slipp) &&
                     OrderClose(GetTicketMaxOrder(), FindLastLots(), Ask, slipp))
                    {
                     SendNotification("Закрылся минимальный максимальный и предпоследний ордера на продажу: " + Symbol() + ", Баланс" + DoubleToString(NormalizeDouble(AccountBalance(), 2))
                                      + ", Свободно денежных средств" + DoubleToString(NormalizeDouble(AccountFreeMargin(), 2)));
                     Print("Максимальный и минимальный ордера на продажу успешно закрыты!");
                    }
                  else
                    {
                     Print("Не удалось закрыть максимальный и минимальный ордера на продажу!",GetLastError());
                    }
                 }
              }
           }
        }
     }
  }
 
EVGENII SHELIPOV #:


が、このように

//-------------------------------------------------------------------+  Команда на удаление линий отображающую среднюю цену мин и макс ордеров и текста
   if(CountTrade() == 0 || Drawdown < DrawdownClosingMinMaxOrdersZero)
     {
      flag_close2=0;
      flag_close3=0;

注文がない場合ということ