Помогите зачинающиму програмеру........ Пожалуста ...... - страница 5

 
if(Ask>=OP_BUYSTOP||Bid<=OP_SELLSTOP)//
{
for(tick=1;tick<OrdersTotal();tick++)

{
if(OrderSelect(tick, SELECT_BY_POS, MODE_TRADES) == true)
{
// if(OrderSymbol()==Symbol())
{
//----

//----
if(OrderType()==OP_BUYSTOP)
{
OrderDelete(OrderTicket(),Blue);
}
//----
if(OrderType()==OP_SELLSTOP)
{
OrderDelete(OrderTicket(),Red);
}
//----
}
}
else
Print("Ошибка ", GetLastError());
}
}



не Могу разобраться открывает и сразу же удаляет как остановить и чтоб удалял не сработавший ордер ?????
 
VOLDEMAR:

не Могу разобраться открывает и сразу же удаляет как остановить и чтоб удалял не сработавший ордер ?????

int Order_Count[6];

int start(){
   Order_Count_Calculate(Symbol(), Magic);
   if (Order_Count[OP_BUYSTOP]+Order_Count[OP_SELLSTOP]==1) Order_Delete_Stop(Symbol(), Magic);
}

//+------------------------------------------------------------------+
//|       Функция возвращаюшая количество ордеров определенного типа |
//|                                   исхода из заданных ограничений |
//|                                Copyright © 2010, Victor Nicolaev |
//|                                            e-mail: vinin@mail.ru |
//+------------------------------------------------------------------+
//| int Order_Count_Calculate(string lSymbol, int lMagic, int lOP=-1)|
//+------------------------------------------------------------------+
int Order_Count_Calculate(string lSymbol, int lMagic, int lOP=-1){
   ArrayInitialize(Order_Count,0);
   for (int i = OrdersTotal() - 1;  i >= 0;  i--) {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if (OrderSymbol() != lSymbol)                   continue;
      if (OrderMagicNumber() != lMagic)                continue;
      Order_Count[OrderType()]++;
   }
   if (lOP!=-1) return(Order_Count[lOP]);
   return(0);
}
//+------------------------------------------------------------------+
//|                                         Функция закрытия ордеров |
//|                                Copyright © 2010, Victor Nicolaev |
//|                                            e-mail: vinin@mail.ru |
//+------------------------------------------------------------------+
//| void Order_Delete_Stop(int lMagic, int lOP=-1);                        |
//+------------------------------------------------------------------+
void Order_Delete_Stop(string lSymbol, int lMagic, int lOP=-1){

   int err=GetLastError();

   for(int i = OrdersTotal() - 1;  i >= 0;  i--) {
      if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))   continue;
      if (OrderSymbol() != lSymbol)                      continue;
      if (OrderMagicNumber() != lMagic)                  continue;
      if (OrderType()!=OP_BUYSTOP || OrderType()!=OP_SELLSTOP)   continue;
      if (OrderType()!=lOP && lOP!=-1)                   continue;
      
      if (!OrderDelete(OrderTicket())) {
         err=GetLastError();
         Print(fMyErDesc(err));
      }
   }
}
Что-то примерно так можно использовать
 

Функцию еще одну не добавил (забыл)

//+------------------------------------------------------------------+
//|                                          Функция контроля ошибок |
//|                                        Copyright © 2010, Integer |
//+------------------------------------------------------------------+
//| string fMyErDesc(int aErrNum);                                   |
//+------------------------------------------------------------------+

string fMyErDesc(int aErrNum){
   string pref="Err Num: "+aErrNum+" - ";
   switch(aErrNum){
      case    0: return(pref+"NO ERROR"                              );
      case    1: return(pref+"NO RESULT"                             );
      case    2: return(pref+"COMMON ERROR"                          );
      case    3: return(pref+"INVALID TRADE PARAMETERS"              );
      case    4: return(pref+"SERVER BUSY"                           );
      case    5: return(pref+"OLD VERSION"                           );
      case    6: return(pref+"NO CONNECTION"                         );
      case    7: return(pref+"NOT ENOUGH RIGHTS"                     );
      case    8: return(pref+"TOO FREQUENT REQUESTS"                 );
      case    9: return(pref+"MALFUNCTIONAL TRADE"                   );
      case   64: return(pref+"ACCOUNT DISABLED"                      );
      case   65: return(pref+"INVALID ACCOUNT"                       );
      case  128: return(pref+"TRADE TIMEOUT"                         );
      case  129: return(pref+"INVALID PRICE"                         );
      case  130: return(pref+"INVALID STOPS"                         );                           
      case  131: return(pref+"INVALID TRADE VOLUME"                  );
      case  132: return(pref+"MARKET CLOSED"                         );
      case  133: return(pref+"TRADE DISABLED"                        );
      case  134: return(pref+"NOT ENOUGH MONEY"                      );
      case  135: return(pref+"PRICE CHANGED"                         );
      case  136: return(pref+"OFF QUOTES"                            );
      case  137: return(pref+"BROKER BUSY"                           );
      case  138: return(pref+"REQUOTE"                               );
      case  139: return(pref+"ORDER LOCKED"                          );
      case  140: return(pref+"LONG POSITIONS ONLY ALLOWED"           );
      case  141: return(pref+"TOO MANY REQUESTS"                     );
      case  145: return(pref+"TRADE MODIFY DENIED"                   );
      case  146: return(pref+"TRADE CONTEXT BUSY"                    );
      case  147: return(pref+"TRADE EXPIRATION DENIED"               );
      case  148: return(pref+"TRADE TOO MANY ORDERS"                 );
      //---- mql4 run time errors
      case 4000: return(pref+"NO MQLERROR"                           );
      case 4001: return(pref+"WRONG FUNCTION POINTER"                );
      case 4002: return(pref+"ARRAY INDEX OUT OF RANGE"              );
      case 4003: return(pref+"NO MEMORY FOR FUNCTION CALL STACK"     );
      case 4004: return(pref+"RECURSIVE STACK OVERFLOW"              );
      case 4005: return(pref+"NOT ENOUGH STACK FOR PARAMETER"        );
      case 4006: return(pref+"NO MEMORY FOR PARAMETER STRING"        );
      case 4007: return(pref+"NO MEMORY FOR TEMP STRING"             );
      case 4008: return(pref+"NOT INITIALIZED STRING"                );
      case 4009: return(pref+"NOT INITIALIZED ARRAYSTRING"           );
      case 4010: return(pref+"NO MEMORY FOR ARRAYSTRING"             );
      case 4011: return(pref+"TOO LONG STRING"                       );
      case 4012: return(pref+"REMAINDER FROM ZERO DIVIDE"            );
      case 4013: return(pref+"ZERO DIVIDE"                           );
      case 4014: return(pref+"UNKNOWN COMMAND"                       );
      case 4015: return(pref+"WRONG JUMP"                            );
      case 4016: return(pref+"NOT INITIALIZED ARRAY"                 );
      case 4017: return(pref+"DLL CALLS NOT ALLOWED"                 );
      case 4018: return(pref+"CANNOT LOAD LIBRARY"                   );
      case 4019: return(pref+"CANNOT CALL FUNCTION"                  );
      case 4020: return(pref+"EXTERNAL EXPERT CALLS NOT ALLOWED"     );
      case 4021: return(pref+"NOT ENOUGH MEMORY FOR RETURNED STRING" );  
      case 4022: return(pref+"SYSTEM BUSY"                           );                            
      case 4050: return(pref+"INVALID FUNCTION PARAMETERS COUNT"     );
      case 4051: return(pref+"INVALID FUNCTION PARAMETER VALUE"      );
      case 4052: return(pref+"STRING FUNCTION INTERNAL ERROR"        );
      case 4053: return(pref+"SOME ARRAY ERROR"                      ); 
      case 4054: return(pref+"INCORRECT SERIES ARRAY USING"          ); 
      case 4055: return(pref+"CUSTOM INDICATOR ERROR"                );
      case 4056: return(pref+"INCOMPATIBLE ARRAYS"                   );
      case 4057: return(pref+"GLOBAL VARIABLES PROCESSING ERROR"     );
      case 4058: return(pref+"GLOBAL VARIABLE NOT FOUND"             ); 
      case 4059: return(pref+"FUNCTION NOT ALLOWED IN TESTING MODE"  );
      case 4060: return(pref+"FUNCTION NOT CONFIRMED"                );
      case 4061: return(pref+"SEND MAIL ERROR"                       );
      case 4062: return(pref+"STRING PARAMETER EXPECTED"             );
      case 4063: return(pref+"INTEGER PARAMETER EXPECTED"            );
      case 4064: return(pref+"DOUBLE PARAMETER EXPECTED"             );
      case 4065: return(pref+"ARRAY AS PARAMETER EXPECTED"           );
      case 4066: return(pref+"HISTORY WILL UPDATED"                  );
      case 4067: return(pref+"TRADE ERROR"                           );
      case 4099: return(pref+"END OF FILE"                           );
      case 4100: return(pref+"SOME FILE ERROR"                       );
      case 4101: return(pref+"WRONG FILE NAME"                       );
      case 4102: return(pref+"TOO MANY OPENED FILES"                 );
      case 4103: return(pref+"CANNOT OPEN FILE"                      );
      case 4104: return(pref+"INCOMPATIBLE ACCESS TO FILE"           );
      case 4105: return(pref+"NO ORDER SELECTED"                     );
      case 4106: return(pref+"UNKNOWN SYMBOL"                        );
      case 4107: return(pref+"INVALID PRICE PARAM"                   );
      case 4108: return(pref+"INVALID TICKET"                        );
      case 4109: return(pref+"TRADE NOT ALLOWED"                     );
      case 4110: return(pref+"LONGS  NOT ALLOWED"                    );
      case 4111: return(pref+"SHORTS NOT ALLOWED"                    );
      case 4200: return(pref+"OBJECT ALREADY EXISTS"                 );
      case 4201: return(pref+"UNKNOWN OBJECT PROPERTY"               );
      case 4202: return(pref+"OBJECT DOES NOT EXIST"                 );
      case 4203: return(pref+"UNKNOWN OBJECT TYPE"                   );
      case 4204: return(pref+"NO OBJECT NAME"                        );
      case 4205: return(pref+"OBJECT COORDINATES ERROR"              );
      case 4206: return(pref+"NO SPECIFIED SUBWINDOW"                );
      case 4207: return(pref+"SOME OBJECT ERROR"                     );      
      
      default:   return(pref+"WRONG ERR NUM"                         );
   }
}  
 

Опишите плиз по подробней функцию удаления отложенных ордеров .... Вторую неделю голову ломаю........

как эта функция находит нужный ордер ???? Пример есть два бай стопа с профитом 50 и 80 и такиеже сел стопы как сделать так чбы при определённом условии удалились только отложенники с профитом 80 ?????

 
VOLDEMAR:

Опишите плиз по подробней функцию удаления отложенных ордеров .... Вторую неделю голову ломаю........

как эта функция находит нужный ордер ???? Пример есть два бай стопа с профитом 50 и 80 и такиеже сел стопы как сделать так чбы при определённом условии удалились только отложенники с профитом 80 ?????

Перебираешь в цикле ВСЕ ордера и выбираешь нужные

Остальное поиском найти можно

 

Топикстартер, извините, что встрял со своей шарадой в Вашу ветку (на моей страничке в кодбазе никто не ответил - может быть тут знатоки разродятся)

Для тех, кто в теме: (может быть авторы МТ-4 снизойдут и попытаются растолковать):

выдержка из одного моего кода /avalanche 7/ https://www.mql5.com/ru/code/9878 (в журнале ошибки не пишет):

//проверка тикетов на некорректность:  
          bool OCB=ticket_buy>0 && ticket_sell>0;
          if(OCB) OrderCloseBy(ticket_buy,ticket_sell,White); // Цикл закрытия

если меняю на

//проверка тикетов на некорректность:            
if(ticket_buy>0 && ticket_sell>0) OrderCloseBy(ticket_buy,ticket_sell,White); // Цикл закрытия

то почему-то в режиме тестирования иногда в журнале лепит ошибку именно по OrderCloseBy() - для меня лично это неразрешимая загадка... Может это глюк 226 билда?

P.S. Полный код см. по вышеприведенной ссылке

 
Если лот ticket_buy > лот ticket_sell разве сработает CloseBy ?
 
zhuki:
Если лот ticket_buy > лот ticket_sell разве сработает CloseBy ?


обязательно. учите матчасть. попробуйте в тестере. закроется полностью меньший объем и часть большего и откроется ордер размером в разницу (100%) Тот вариант кода, что приведен вначале - работает 100%, тот, что второй - подглючивает (думаю - билд 226, но не уверен - в любом случае это глюк, так как обе части по логике абсолютно идентичны)

Поставьте мою лавину (самый наивный вариант - см. ссылку выше) и посмотрите, как закрываются разнообъемные разнонаправленные ордера через OrderCloseBy()

 
AlexSTAL:

Перебираешь в цикле ВСЕ ордера и выбираешь нужные

Остальное поиском найти можно


По подробне обьясните никак не могу разобраться .... напишите небольшой пример
 
Здарово народ, я новичек помогите пожалуйста, просто хочу понять как писать советники. напишите мне советник- например на eur/usd покупает 0.1 лот с стоп лосом 100 пунктов и тейк профитом 100, если закрывается стоплосом то сразу продает 0,1 лот с таким же стоплоссом 100 и тейкпрофитом 100, а если закрывается тейк профитом то сразу покупает 0,1 лот s/l-100 и t/p 100. и.т.д. stariy82@mail.ru
Причина обращения: