[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 564

 

Я уже дал вам код удаления экспа с графика. Так как он может быть только один (на один график), то вызов этой функции с своим хендлом приведет к самоудалению эксперта

 
FAQ:


...дать команду самому себе на удаление...


Спасибо, работает.

P.S.

#include <WinUser32.mqh>
 
Само собой разумеется. При работе с импортируемыми функциями, не забываем про подключение экспорта из соответствующих приложений.
 
Помогите, почему не работает?

Спасибо.

//-----
  static bool First = true;
  static int PreOrdersTotal = 0;
  int NowOrdersTotal = CountTrades();
  if(First)
  {
    PreOrdersTotal = NowOrdersTotal;
    First = false;
    return(0);
  }
  if(UseSound == true && NowOrdersTotal < PreOrdersTotal) {PlaySound(CloseSound);}
  PreOrdersTotal = NowOrdersTotal;
//-----

 
FAQ:

Закрыть свое окно, дать команду самому себе на удаление...

PostMessageA(WindowHandle(Symbol(),Period()), WM_COMMAND, 33050, 0);

Значит в MQL4 штатный способ завершения работы эксперта не предусмотрен. Только непосредственным обращением к Win32 API.

Понятно, спасибо.

 
takeda:

Значит в MQL4 штатный способ завершения работы эксперта не предусмотрен. Только непосредственным обращением к Win32 API.

Понятно, спасибо.

Библиотека. Много полезных функций для управления МТ4. В том числе удаление эксперта есть.
 
Zhunko:
Библиотека. Много полезных функций для управления МТ4. В том числе удаление эксперта есть.

Посмотрел (пока бегло). Замечательная библиотека!

Спасибо!

 

Добрый день.

Модификация ордеров работает частично, помогите разобраться в чём проблема.

Код и лог прилагаю. В логе расписал, что работает, а что нет.....

void AllSellLockBuyModifi()
{
 double sell_sl = 0.0;
 double sell_tp = NormalizeDouble((AllAvP()-TakeProfit*Point),Digits);
 int spread = MarketInfo(Symbol(),MODE_SPREAD);
 double lock_buy_tp = NormalizeDouble((LastSellLockBuyAvP()+TakeProfit*Point),Digits);
 double last_sell_sl = NormalizeDouble((lock_buy_tp+spread*Point),Digits);
 double lock_buy_sl = NormalizeDouble((sell_tp-spread*Point),Digits);     
 Print("AllAvP = ",AllAvP()," sell_tp = ",sell_tp," lock_buy_tp = ",lock_buy_tp," last_sell_sl = ",last_sell_sl," lock_buy_sl = ",lock_buy_sl);
 for (int i = 0; i <= OrdersTotal(); i++)
    {
     OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
     if (OrderSymbol()!=Symbol())continue;
     if (OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
     if (OrderType()==OP_SELL)
       {Print("Find Sell Order");
        if (OrderOpenPrice()==!LastSellPrice()) sell_sl = 0;
        if (OrderOpenPrice()==LastSellPrice()) sell_sl = last_sell_sl;
        Print("Мод-ция ордера SELL № ",OrderTicket());
        OrderModify (OrderTicket(),OrderOpenPrice(),sell_sl,sell_tp,0,CLR_NONE);
        error=GetLastError();
        if (error != 0) Print("Мод-ция ордера SELL № ",OrderTicket()," ошибка № ",error);
       }         
         else 
             { Print("Find BUY Order");       
              if (OrderType()==OP_BUY)
                {
                 Print("Мод-ция ордера LOCK BUY");
                 OrderModify (OrderTicket(),OrderOpenPrice(),lock_buy_sl,lock_buy_tp,0,CLR_NONE);
                 error=GetLastError();
                 if (error != 0) Print("Мод-ция ордера LOCK BUY № ",OrderTicket()," ошибка № ",error);
                }
             }
    }
 return(0);
}
Файлы:
log.txt  4 kb
 
TEXX:

Добрый день.

Модификация ордеров работает частично, помогите разобраться в чём проблема.

Код и лог прилагаю. В логе расписал, что работает, а что нет.....


Для начала, поправьте эти строки:

for (int i = 0; i <= OrdersTotal(); i++)
    {
     OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

на эти:

for (int i = 0; i < OrdersTotal(); i++)
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
 
PapaYozh:


Для начала, поправьте эти строки:

на эти:


не помогло...