Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 463

 
HUNTERGOOD:

Просьбу, правильно я создал еще на странице 457 , в паосте  #4567,  и всё необходимое: "индикатор, что нужно, и как именно" - там же,  совершенно не сложно всё описать,  изложил всё коротко и по существу, внятно и понятно,  и что не так было изложено в моём первом сообщении, что мою такую не значительную просьбу, для чела который соображает в коде,  игнорируют шесть страниц, и в итоге "стебают" мне по "фарам" - пишу я тут огрызками.  ДУБЛИРУЮ ПРОСЬБУ:

(((^^^Всем добрый день. Уважаемые программисты, помогите пожалуйста вставить в индикатор строку с возможностью указания звукового файла, для каждого Alert3.Lv1;2;3, чтобы срабатывал разный звук, который укажешь. Сам я не соображаю коде и программировании.^^^)))

А вы его пробовали установить на график, работает?

 

Подскажите : Хочу выставлять стопы и тейки сразу после наличия любых ордеров. Если ордера открыл советник  -выставить стоп и тейк . Если ордера открыл оператор -выставить стоп и тейк. Как более правельнее это описать? Так чтобы потом советник и оператор понимали где чьи ордера!

код такой и вроде всё работает, но правильно ли так?

Или нужно для каждого типа ордеров (Советник или Оператор) организовывать перебор через FOR?

Файлы:
STOP_TAKE.txt  4 kb
 

Как правильно:1

2

 
Rewerpool:

Как правильно:

Тут нормально вставляются коды. Картинки разбирать тут большинству лень.

 
Konstantin Nikitin:

Тут нормально вставляются коды. Картинки разбирать тут большинству лень.

А вроде сначала Код весь прикрепил! Только файлом! Сообщение  . Потом более коротко описал ситуацию в картинках!

 

@Konstantin Nikitin  ПОВТОРЮ ВОПРОС! Подскажите : Хочу выставлять стопы и тейки сразу после наличия любых ордеров. Если ордера открыл советник  -выставить стоп и тейк . Если ордера открыл оператор -выставить стоп и тейк. Как более правельнее это описать? Так чтобы потом советник и оператор понимали где чьи ордера!

код такой и вроде всё работает, но правильно ли так?

Или нужно для каждого типа ордеров (Советник или Оператор) организовывать перебор через FOR?



//+------------------------------------------------------------------+

//| ФУНКЦИЯ Выставления открытым ордерам Стопов и Тейка              |
//+------------------------------------------------------------------+
  void STOP_TAKE()
{
   int tip,Ticket;
   double OOP,OSL,OTP;
   int SPREAD    = (int)MarketInfo(Symbol(),MODE_SPREAD);
   if (stoploss<STOPLEVEL) stoploss=0; 
   if (takeprofit<STOPLEVEL) takeprofit=0; 
 
    for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS)==true)
        {
         tip=OrderType();
//----------Если Ордера Советника        
         if(tip<2 && OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            OSL = OrderStopLoss();
            OTP = OrderTakeProfit();
            if ((OSL==0&&stoploss!=0)||(OTP==0&&takeprofit!=0))
            {  
               OOP   = OrderOpenPrice();
               Ticket = OrderTicket();
               if (tip==OP_BUY || tip==OP_BUYSTOP || tip==OP_BUYLIMIT)             
               {
                  if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
                  if (stoploss!=0)   SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); else SL=OSL;       
                  if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("SetStop ",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                  else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
               }                                         
               if (tip==OP_SELL || tip==OP_SELLSTOP || tip==OP_SELLLIMIT)        
               {
                  if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
                  if (stoploss!=0)   SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;             
                  if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                  else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
               } 
            }
         }
//----------Если Ордера Оператора 
   else if(tip<2 && OrderSymbol()==Symbol()&& OrderMagicNumber()!=Magic)
          {     
     OSL = OrderStopLoss();
            OTP = OrderTakeProfit();
            if ((OSL==0&&stoploss!=0)||(OTP==0&&takeprofit!=0))
            {  
               OOP   = OrderOpenPrice();
               Ticket = OrderTicket();
               if (tip==OP_BUY || tip==OP_BUYSTOP || tip==OP_BUYLIMIT)             
               {
                  if (takeprofit!=0) TP = NormalizeDouble(OOP + takeprofit*Point,Digits); else TP=OTP;
                  if (stoploss!=0)   SL = NormalizeDouble(OOP - (stoploss+SPREAD)* Point,Digits); else SL=OSL;       
                  if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                  else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
               }                                         
               if (tip==OP_SELL || tip==OP_SELLSTOP || tip==OP_SELLLIMIT)        
               {
                  if (takeprofit!=0) TP = NormalizeDouble(OOP - takeprofit*Point,Digits); else TP=OTP;
                  if (stoploss!=0)   SL = NormalizeDouble(OOP + (stoploss+SPREAD)* Point,Digits); else SL=OSL;             
                  if (OrderModify(Ticket,OOP,SL,TP,0,White)) Print("STOP_TAKE",Ticket," SL ",OSL," -> ",SL,"   TP ",OTP," -> ",TP);
                  else Print(Symbol()," Error STOP_TAKE",GetLastError(),"  Ticket ",Ticket);
               } 
            }
         }
     
      }
   }
}
 
Rewerpool:

А вроде сначала Код весь прикрепил! Только файлом! Сообщение  . Потом более коротко описал ситуацию в картинках!

Ну а тут зачем картинку лепить. Я вам об этом говорю.

 
Rewerpool: Ордера выставленные в ручную имеют магик номер равный 0, советник выставляет со своим магиком. По магикам и ориентируйтесь.
 

@Konstantin Nikitin ОК! А конструкция кода для открытия стоп тейк Советником или Оператором верная? Я поэтому картинки прикрепил, чтоб вопрос более понятней был!

 
Rewerpool:

@Konstantin Nikitin ОК! А конструкция кода для открытия стоп тейк Советником или Оператором верная? Я поэтому картинки прикрепил, чтоб вопрос более понятней был!

Ну я бы примерно так сделал

for(int i=0; i<OrdersTotal(); i++)
{
     if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
     if(OrderSymbol()!=Symbol()) continue;
     
     int tip = OrderType();
     if(tip!=OP_BUY && tip!=OP_BUYSTOP && tip!=OP_BUYLIMIT) continue;
     
     // переменные которые будут использоваться в любых ордерах
     int Ticket = OrderTicket();
     double OOP = OrderOpenPrice();
     
     //---
     switch( OrderMagicNumber() )
     {
          case Magic:    // Ордера советника
               {
                    // что-то делаем
               }
               break;

          default:       // Все остальные
               {
                    // что-то делаем
               }
     }
}
Причина обращения: