Ваши вопросы по языку MQL4

Ugar

Гуру форума
Код:
int OnInit()
  {
//---
   double p = MarketInfo(_Symbol,MODE_SWAPLONG);
   double p1 = MarketInfo(_Symbol,MODE_SWAPSHORT);
   string swop = "test";
   if(p>0.0)
      swop = "buy";
   if(p1>0.0)
      swop = "sell";
   if(p<0.0 && p1<0.0)
      swop = "buy";
   else
      swop = "test";
//---
   return(INIT_SUCCEEDED);
  }
  //**********************************************************
  void OnTick()
  {
   uo(indikator);//работает
   Comment(swop);
  }

пишет переменная не определена. Как быть?
Теперь переменные p, p1, swop локальные и существуют только в функции OnInit.
Если пытаться их использовать в других функциях, то это будут другие переменные и их там же надо объявлять перед использованием. Они не будут иметь никакого отношения другим локальным переменным в других функциях, даже если имена совпадают.
 

Anton0708

Интересующийся
кто нибудь может помочь с кодом?
у мен есть код но я как чайник не могу сделать так что бы оно стало файлом ex4 или mql4
помогите пожалуйста
 

star603

Новичок форума
Теперь переменные p, p1, swop локальные и существуют только в функции OnInit.
Если пытаться их использовать в других функциях, то это будут другие переменные и их там же надо объявлять перед использованием. Они не будут иметь никакого отношения другим локальным переменным в других функциях, даже если имена совпадают.
Код:
void OnTick()
  {
   uo(indikator);//работает
   fl();//работает
   st1();
  }
//******************************************************************************
double fl()//Функция по расчету лота
  {
   double Flot =0.0;
   switch(LOT)
     {
      case 0://Фиксированный лот
         Flot=Lot;
         break;
      case 1://Лот по балансу
         Flot=NormalizeDouble(MathCeil(AccountBalance()/100)/100,2);
         break;
      case 2://Лот по эквити
         Flot=NormalizeDouble(MathCeil(AccountEquity()/100)/100,2);
         break;
      case 3://Лот по риску
         Flot=NormalizeDouble((AccountFreeMargin()*Risk)/1000,2);
         break;
    return(Flot);
}
//********************************************************
void st1()
  {
   double Flot = 0.0;//Если поменяю название пишет переменная не определена
   switch(TORGISW)
     {
      case 0:
         if(swop == "buy")
            ticketss=OrderSend(Symbol(),OP_BUY,Flot,Ask,Slippage,0,0,"S1",Magic,clrNONE);
         break;
      case 1:
         if(swop == "sell")
            ticketss=OrderSend(Symbol(),OP_SELL,Flot,Bid,Slippage,0,0,"S1",Magic,clrNONE);
         break;
      case 2:
            ticketss=OrderSend(Symbol(),OP_BUY,Flot,Ask,Slippage,0,0,"S1",Magic,clrNONE);
            ticketss=OrderSend(Symbol(),OP_SELL,Flot,Bid,Slippage,0,0,"S1",Magic,clrNONE);
         break;
     }
  }
  //*****************************************************************

Я понимаю пока только так
 

Ugar

Гуру форума
Код:
void OnTick()
  {
   uo(indikator);//работает
   fl();//работает
   st1();
  }
//******************************************************************************
double fl()//Функция по расчету лота
  {
   double Flot =0.0;
   switch(LOT)
     {
      case 0://Фиксированный лот
         Flot=Lot;
         break;
      case 1://Лот по балансу
         Flot=NormalizeDouble(MathCeil(AccountBalance()/100)/100,2);
         break;
      case 2://Лот по эквити
         Flot=NormalizeDouble(MathCeil(AccountEquity()/100)/100,2);
         break;
      case 3://Лот по риску
         Flot=NormalizeDouble((AccountFreeMargin()*Risk)/1000,2);
         break;
    return(Flot);
}
//********************************************************
void st1()
  {
   double Flot = 0.0;//Если поменяю название пишет переменная не определена
   switch(TORGISW)
     {
      case 0:
         if(swop == "buy")
            ticketss=OrderSend(Symbol(),OP_BUY,Flot,Ask,Slippage,0,0,"S1",Magic,clrNONE);
         break;
      case 1:
         if(swop == "sell")
            ticketss=OrderSend(Symbol(),OP_SELL,Flot,Bid,Slippage,0,0,"S1",Magic,clrNONE);
         break;
      case 2:
            ticketss=OrderSend(Symbol(),OP_BUY,Flot,Ask,Slippage,0,0,"S1",Magic,clrNONE);
            ticketss=OrderSend(Symbol(),OP_SELL,Flot,Bid,Slippage,0,0,"S1",Magic,clrNONE);
         break;
     }
  }
  //*****************************************************************

Я понимаю пока только так
Код:
void OnTick()
  {
   uo(indikator);//работает
   st1(fl());
  }
//******************************************************************************
double fl()//Функция по расчету лота
  {
   double Flot =0.0;
   switch(LOT)
     {
      case 0://Фиксированный лот
         Flot=Lot;
         break;
      case 1://Лот по балансу
         Flot=NormalizeDouble(MathCeil(AccountBalance()/100)/100,2);
         break;
      case 2://Лот по эквити
         Flot=NormalizeDouble(MathCeil(AccountEquity()/100)/100,2);
         break;
      case 3://Лот по риску
         Flot=NormalizeDouble((AccountFreeMargin()*Risk)/1000,2);
         break;
    return(Flot);
}
//********************************************************
void st1(double lot)
  {
   switch(TORGISW)
     {
      case 0:
         if(swop == "buy")
            ticketss=OrderSend(Symbol(),OP_BUY,lot,Ask,Slippage,0,0,"S1",Magic,clrNONE);
         break;
      case 1:
         if(swop == "sell")
            ticketss=OrderSend(Symbol(),OP_SELL,lot,Bid,Slippage,0,0,"S1",Magic,clrNONE);
         break;
      case 2:
            ticketss=OrderSend(Symbol(),OP_BUY,lot,Ask,Slippage,0,0,"S1",Magic,clrNONE);
            ticketss=OrderSend(Symbol(),OP_SELL,lot,Bid,Slippage,0,0,"S1",Magic,clrNONE);
         break;
     }
  }
Так будет чуть менее по криво.
Всё же не понятно от куда берётся переменная ticketss, TORGISW и LOT. Похоже опять глобальные.
 

star603

Новичок форума
Код:
void OnTick()
  {
   uo(indikator);//работает
   st1(fl());
  }
//******************************************************************************
double fl()//Функция по расчету лота
  {
   double Flot =0.0;
   switch(LOT)
     {
      case 0://Фиксированный лот
         Flot=Lot;
         break;
      case 1://Лот по балансу
         Flot=NormalizeDouble(MathCeil(AccountBalance()/100)/100,2);
         break;
      case 2://Лот по эквити
         Flot=NormalizeDouble(MathCeil(AccountEquity()/100)/100,2);
         break;
      case 3://Лот по риску
         Flot=NormalizeDouble((AccountFreeMargin()*Risk)/1000,2);
         break;
    return(Flot);
}
//********************************************************
void st1(double lot)
  {
   switch(TORGISW)
     {
      case 0:
         if(swop == "buy")
            ticketss=OrderSend(Symbol(),OP_BUY,lot,Ask,Slippage,0,0,"S1",Magic,clrNONE);
         break;
      case 1:
         if(swop == "sell")
            ticketss=OrderSend(Symbol(),OP_SELL,lot,Bid,Slippage,0,0,"S1",Magic,clrNONE);
         break;
      case 2:
            ticketss=OrderSend(Symbol(),OP_BUY,lot,Ask,Slippage,0,0,"S1",Magic,clrNONE);
            ticketss=OrderSend(Symbol(),OP_SELL,lot,Bid,Slippage,0,0,"S1",Magic,clrNONE);
         break;
     }
  }
Так будет чуть менее по криво.
Всё же не понятно от куда берётся переменная ticketss, TORGISW и LOT. Похоже опять глобальные.
Что косается TORGISW и LOT эти переменные для енум списка:

Код:
enum loti
  {
   m0,// Лот фиксированый+
   m1,// Лот исходя из баланса+
   m2,// Лот исходя из эквити+
   m3,// Лот по задать свой риск в %+
   m4,// Лот по арифметической прогрессии+
   m5,// Лот по геометрической прогрессии+
   m6,// Лот по заданной арифметической  прогрессии+
   m7,// Лот по заданной геометрической  прогрессии+
   m8 // Лот двоенный если своп положительный+
  };
  //*****************************************************************************
 sinput RegimTorga TORGISW =0;//Какой своп положительный
 sinput stopi _Stop = 0;//Способ установки стопов
 

star603

Новичок форума
Код:
void OnTick()
  {
   uo(indikator);//работает
   st1(fl());
  }
//******************************************************************************
double fl()//Функция по расчету лота
  {
   double Flot =0.0;
   switch(LOT)
     {
      case 0://Фиксированный лот
         Flot=Lot;
         break;
      case 1://Лот по балансу
         Flot=NormalizeDouble(MathCeil(AccountBalance()/100)/100,2);
         break;
      case 2://Лот по эквити
         Flot=NormalizeDouble(MathCeil(AccountEquity()/100)/100,2);
         break;
      case 3://Лот по риску
         Flot=NormalizeDouble((AccountFreeMargin()*Risk)/1000,2);
         break;
    return(Flot);
}
//********************************************************
void st1(double lot)
  {
   switch(TORGISW)
     {
      case 0:
         if(swop == "buy")
            ticketss=OrderSend(Symbol(),OP_BUY,lot,Ask,Slippage,0,0,"S1",Magic,clrNONE);
         break;
      case 1:
         if(swop == "sell")
            ticketss=OrderSend(Symbol(),OP_SELL,lot,Bid,Slippage,0,0,"S1",Magic,clrNONE);
         break;
      case 2:
            ticketss=OrderSend(Symbol(),OP_BUY,lot,Ask,Slippage,0,0,"S1",Magic,clrNONE);
            ticketss=OrderSend(Symbol(),OP_SELL,lot,Bid,Slippage,0,0,"S1",Magic,clrNONE);
         break;
     }
  }
Так будет чуть менее по криво.
Всё же не понятно от куда берётся переменная ticketss, TORGISW и LOT. Похоже опять глобальные.
Код:
void OnTick()
  {
   uo(indikator);//работает
   st1(fl(),sw());
  }
  //*************************************************
  string sw()
  {
   string swop = "yes";
   double p = MarketInfo(_Symbol,MODE_SWAPLONG);
   double p1 = MarketInfo(_Symbol,MODE_SWAPSHORT);
   if(p>0.0)
      swop = "buy";
   else
      if(p1>0.0)
         swop = "sell";
   if(p<0.0 && p1<0.0)
      swop = "bouth";
   else
      if(p>0.0 && p1>0.0)
         swop = "test";
   return(swop);
  }
//*****************************************************************
double fl()//Функция по расчету лота
  {
   double Flot =0.0;
   switch(LOT)
     {
      case 0://Фиксированный лот
         Flot=Lot;
         break;
      case 1://Лот по балансу
         Flot=NormalizeDouble(MathCeil(AccountBalance()/100)/100,2);
         break;
      case 2://Лот по эквити
         Flot=NormalizeDouble(MathCeil(AccountEquity()/100)/100,2);
         break;
      case 3://Лот по риску
         Flot=NormalizeDouble((AccountFreeMargin()*Risk)/1000,2);
         break;
    return(Flot);
  }
}
//***********************************************************************

не много переписал по твоему примеру.
 

star603

Новичок форума
Код:
double ST()
  {
   double Sl=0.0;
   switch(Stop)
     {
      case 0:
         Sl=0.0;
         break;
      case 1:
         for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
           {
            if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
              {
               switch(OrderType())
                 {
                  case 0:
                     if(OrderStopLoss()==0.0 || OrderStopLoss()<0.0)
                        Sl = NormalizeDouble(Bid-StopLoss*Point,Digits);
                     break;
                  case 1:
                     if(OrderStopLoss()==0.0|| OrderStopLoss()<0.0)
                        Sl = NormalizeDouble(Ask+StopLoss*Point,Digits);
                     break;
                 }
              };
           }
         break;
      case 2:
         for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
           {
            if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
              {
               switch(OrderType())
                 {
                  case 0:
                     if(OrderStopLoss()==0.0)
                        Sl = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
                     break;
                  case 1:
                     if(OrderStopLoss()==0.0)
                        Sl = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);;
                     break;
                 }
              };
           }
         break;
     }
   return(Sl);
  }
//+------------------------------------------------------------------+
double PT()
  {
   double Pt=0.0;
   switch(Profit)
     {
      case 0:
         Pt=0.0;
         break;
      case 1:
         for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
           {
            if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
              {
               switch(OrderType())
                 {
                  case 0:
                     if(OrderStopLoss()==0.0 || OrderStopLoss()<0.0)
                        Pt = NormalizeDouble(Ask+TakeProfit*Point,Digits);
                     break;
                  case 1:
                     if(OrderStopLoss()==0.0|| OrderStopLoss()<0.0)
                        Pt = NormalizeDouble(Bid-TakeProfit*Point,Digits);
                     break;
                 }
              };
           }
         break;
      case 2:
         for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
           {
            if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
              {
               switch(OrderType())
                 {
                  case 0:
                     if(OrderStopLoss()==0.0)
                        Pt = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
                     break;
                  case 1:
                     if(OrderStopLoss()==0.0)
                        Pt = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
                     break;
                 }
              };
           }
         break;
     }
   return(Pt);
  }
//+------------------------------------------------------------------+
void OrderModifi()//+
  {
   for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
     {
      if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
        {
         switch(OrderType())
           {
            case 0:
               if(OrderStopLoss()==0 && OrderTakeProfit()==0)
                 {
                  if((OrderOpenPrice()>SL && OrderStopLoss()!= SL) || (OrderOpenPrice()<TP && OrderTakeProfit()!=TP))
                     ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,0,clrYellow);
                  break;
                 }
            case 1:
               if(OrderStopLoss()==0 && OrderTakeProfit()==0)
                 {
                  if((OrderOpenPrice()<SL && OrderStopLoss()!= SL) || (OrderOpenPrice()>TP && OrderTakeProfit()!=TP))
                     ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,0,clrWhite);
                  break;
                 }
           }
        }
     }
  }
//+------------------------------------------------------------------+

Подскажи пожалуйста как подправить функцию модификации ордера выдает Sl Pt не определены.
Пробовал в аргументы функции но функция не возвращается по этому еще сложность. Пробовал в теле функции определять. Или подскажите как редактировать.
 

ZenFX

Почетный гражданин
Читай хелпы, потом пиши... Нет до тебя это не дошло, всё головой об стенку да ? ))))
 

ZenFX

Почетный гражданин
Или дай направление что почитать
F1 нажми в редакторе, и читай прям с первого слова хелп по MQL4 тогда всё встанет на свои места со временем, и появится понимание ), там всё написано коротко и доходчиво достаточно ).
 

Ugar

Гуру форума
Код:
double ST()
  {
   double Sl=0.0;
   switch(Stop)
     {
      case 0:
         Sl=0.0;
         break;
      case 1:
         for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
           {
            if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
              {
               switch(OrderType())
                 {
                  case 0:
                     if(OrderStopLoss()==0.0 || OrderStopLoss()<0.0)
                        Sl = NormalizeDouble(Bid-StopLoss*Point,Digits);
                     break;
                  case 1:
                     if(OrderStopLoss()==0.0|| OrderStopLoss()<0.0)
                        Sl = NormalizeDouble(Ask+StopLoss*Point,Digits);
                     break;
                 }
              };
           }
         break;
      case 2:
         for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
           {
            if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
              {
               switch(OrderType())
                 {
                  case 0:
                     if(OrderStopLoss()==0.0)
                        Sl = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
                     break;
                  case 1:
                     if(OrderStopLoss()==0.0)
                        Sl = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);;
                     break;
                 }
              };
           }
         break;
     }
   return(Sl);
  }
//+------------------------------------------------------------------+
double PT()
  {
   double Pt=0.0;
   switch(Profit)
     {
      case 0:
         Pt=0.0;
         break;
      case 1:
         for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
           {
            if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
              {
               switch(OrderType())
                 {
                  case 0:
                     if(OrderStopLoss()==0.0 || OrderStopLoss()<0.0)
                        Pt = NormalizeDouble(Ask+TakeProfit*Point,Digits);
                     break;
                  case 1:
                     if(OrderStopLoss()==0.0|| OrderStopLoss()<0.0)
                        Pt = NormalizeDouble(Bid-TakeProfit*Point,Digits);
                     break;
                 }
              };
           }
         break;
      case 2:
         for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
           {
            if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
              {
               switch(OrderType())
                 {
                  case 0:
                     if(OrderStopLoss()==0.0)
                        Pt = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
                     break;
                  case 1:
                     if(OrderStopLoss()==0.0)
                        Pt = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
                     break;
                 }
              };
           }
         break;
     }
   return(Pt);
  }
//+------------------------------------------------------------------+
void OrderModifi()//+
  {
   for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
     {
      if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
        {
         switch(OrderType())
           {
            case 0:
               if(OrderStopLoss()==0 && OrderTakeProfit()==0)
                 {
                  if((OrderOpenPrice()>SL && OrderStopLoss()!= SL) || (OrderOpenPrice()<TP && OrderTakeProfit()!=TP))
                     ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,0,clrYellow);
                  break;
                 }
            case 1:
               if(OrderStopLoss()==0 && OrderTakeProfit()==0)
                 {
                  if((OrderOpenPrice()<SL && OrderStopLoss()!= SL) || (OrderOpenPrice()>TP && OrderTakeProfit()!=TP))
                     ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),SL,TP,0,clrWhite);
                  break;
                 }
           }
        }
     }
  }
//+------------------------------------------------------------------+

Подскажи пожалуйста как подправить функцию модификации ордера выдает Sl Pt не определены.
Пробовал в аргументы функции но функция не возвращается по этому еще сложность. Пробовал в теле функции определять. Или подскажите как редактировать.
С этими то переменными Sl Pt как раз проблем нет.
А вот куча других не объявлена, либо объявлены на глобальном уровне.
 

star603

Новичок форума
С этими то переменными Sl Pt как раз проблем нет.
А вот куча других не объявлена, либо объявлены на глобальном уровне.
Код:
double fiks[2];//Sl and Pt
//*********************************************************************
double ST()
  {
   double Sl=0.0;
   int Magic = 456456;
   switch(Stop)
     {
      case 0:
         Sl=0.0;
         break;
      case 1:
         for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
           {
            if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
              {
               switch(OrderType())
                 {
                  case 0:
                     if(OrderStopLoss()==0.0 || OrderStopLoss()<0.0)
                        Sl = NormalizeDouble(Bid-StopLoss*Point,Digits);
                     break;
                  case 1:
                     if(OrderStopLoss()==0.0|| OrderStopLoss()<0.0)
                        Sl = NormalizeDouble(Ask+StopLoss*Point,Digits);
                     break;
                 }
              };
           }
         break;
      case 2:
         for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
           {
            if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
              {
               switch(OrderType())
                 {
                  case 0:
                     if(OrderStopLoss()==0.0)
                        Sl = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
                     break;
                  case 1:
                     if(OrderStopLoss()==0.0)
                        Sl = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);;
                     break;
                 }
              };
           }
         break;
     }
   return(Sl);
  }
//+------------------------------------------------------------------+
double PT()
  {
   double Pt=0.0;
   int Magic = 456456;
   switch(Profit)
     {
      case 0:
         Pt=0.0;
         break;
      case 1:
         for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
           {
            if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
              {
               switch(OrderType())
                 {
                  case 0:
                     if(OrderStopLoss()==0.0 || OrderStopLoss()<0.0)
                        Pt = NormalizeDouble(Ask+TakeProfit*Point,Digits);
                     break;
                  case 1:
                     if(OrderStopLoss()==0.0|| OrderStopLoss()<0.0)
                        Pt = NormalizeDouble(Bid-TakeProfit*Point,Digits);
                     break;
                 }
              };
           }
         break;
      case 2:
         for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
           {
            if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
              {
               switch(OrderType())
                 {
                  case 0:
                     if(OrderStopLoss()==0.0)
                        Pt = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
                     break;
                  case 1:
                     if(OrderStopLoss()==0.0)
                        Pt = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
                     break;
                 }
              };
           }
         break;
     }
   return(Pt);
  }
//+----------------------------------------------------------------+
void uy(double &gh2[2])
{
 gh2[0]=ST();
 gh2[1]=PT();
}
//+------------------------------------------------------------------+
void OrderModifi()//+
  {
   for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
     {
      bool ticketss;
      int Magic = 456456;
      uy(fiks);
      double Sl= fiks[0];
      double Pt= fiks[1];     
      if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
        {
         switch(OrderType())
           {
            case 0:
               if(OrderStopLoss()==0 && OrderTakeProfit()==0)
                 {
                  if((OrderOpenPrice()>Sl && OrderStopLoss()!= Sl) || (OrderOpenPrice()<Pt && OrderTakeProfit()!=Pt))
                     ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),Sl,Pt,0,clrYellow);
                  break;
                 }
            case 1:
               if(OrderStopLoss()==0 && OrderTakeProfit()==0)
                 {
                  if((OrderOpenPrice()<Sl && OrderStopLoss()!= Sl) || (OrderOpenPrice()>Pt && OrderTakeProfit()!=Pt))
                     ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),Sl,Pt,0,clrWhite);
                  break;
                 }
           }
        }
     }
  }
Код:
 

star603

Новичок форума
Модернизируются только селы. Почему не пойму
Код:
double fiks[2];//Sl and Pt
//*********************************************************************
double ST()
  {
   double Sl=0.0;
   int Magic = 456456;
   switch(Stop)
     {
      case 0:
         Sl=0.0;
         break;
      case 1:
         for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
           {
            if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
              {
               switch(OrderType())
                 {
                  case 0:
                     if(OrderStopLoss()==0.0 || OrderStopLoss()<0.0)
                        Sl = NormalizeDouble(Bid-StopLoss*Point,Digits);
                     break;
                  case 1:
                     if(OrderStopLoss()==0.0|| OrderStopLoss()<0.0)
                        Sl = NormalizeDouble(Ask+StopLoss*Point,Digits);
                     break;
                 }
              };
           }
         break;
      case 2:
         for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
           {
            if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
              {
               switch(OrderType())
                 {
                  case 0:
                     if(OrderStopLoss()==0.0)
                        Sl = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
                     break;
                  case 1:
                     if(OrderStopLoss()==0.0)
                        Sl = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);;
                     break;
                 }
              };
           }
         break;
     }
   return(Sl);
  }
//+------------------------------------------------------------------+
double PT()
  {
   double Pt=0.0;
   int Magic = 456456;
   switch(Profit)
     {
      case 0:
         Pt=0.0;
         break;
      case 1:
         for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
           {
            if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
              {
               switch(OrderType())
                 {
                  case 0:
                     if(OrderStopLoss()==0.0 || OrderStopLoss()<0.0)
                        Pt = NormalizeDouble(Ask+TakeProfit*Point,Digits);
                     break;
                  case 1:
                     if(OrderStopLoss()==0.0|| OrderStopLoss()<0.0)
                        Pt = NormalizeDouble(Bid-TakeProfit*Point,Digits);
                     break;
                 }
              };
           }
         break;
      case 2:
         for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
           {
            if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
              {
               switch(OrderType())
                 {
                  case 0:
                     if(OrderStopLoss()==0.0)
                        Pt = NormalizeDouble(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
                     break;
                  case 1:
                     if(OrderStopLoss()==0.0)
                        Pt = NormalizeDouble(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,Digits);
                     break;
                 }
              };
           }
         break;
     }
   return(Pt);
  }
//+----------------------------------------------------------------+
void uy(double &gh2[2])
{
 gh2[0]=ST();
 gh2[1]=PT();
}
//+------------------------------------------------------------------+
void OrderModifi()//+
  {
   for(int y=0; y<= OrdersTotal()-1; y++)//Начинаем перебор ордеров в истории
     {
      bool ticketss;
      int Magic = 456456;
      uy(fiks);
      double Sl= fiks[0];
      double Pt= fiks[1];   
      if(OrderSelect(y, SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
        {
         switch(OrderType())
           {
            case 0:
               if(OrderStopLoss()==0 && OrderTakeProfit()==0)
                 {
                  if((OrderOpenPrice()>Sl && OrderStopLoss()!= Sl) || (OrderOpenPrice()<Pt && OrderTakeProfit()!=Pt))
                     ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),Sl,Pt,0,clrYellow);
                  break;
                 }
            case 1:
               if(OrderStopLoss()==0 && OrderTakeProfit()==0)
                 {
                  if((OrderOpenPrice()<Sl && OrderStopLoss()!= Sl) || (OrderOpenPrice()>Pt && OrderTakeProfit()!=Pt))
                     ticketss = OrderModify(OrderTicket(),OrderOpenPrice(),Sl,Pt,0,clrWhite);
                  break;
                 }
           }
        }
     }
  }
Код:
[CODE
double indikator[75][31];//Значения разных индикаторов
double fiks[3];
/********************************************
void OnTick()
{
uo(indikator);//работает
st1(fl(),sw(),ST(),PT());
OrderModifi();
}[/CODE]
 
Последнее редактирование:
Верх