Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1097

 
alvlaf:

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

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

int OnInit()                     // abeiks && LRA: замечания приняты)))
{
   if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1);
   return(INIT_SUCCEEDED);
}

// OnDeinit больше не нужен

void OnTick()
{
   if (CountTrades() == 0) // Количество ордеров должно равняться нулю
   {
      if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)))
      // Если последняя сделка убыточная, то открывается такая же, но с увеличенным лотом
      {
         GlobalVariableSet("AllowNewOrders", 0);
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
         ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
         return;
      }
      if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0) 
      // Если прибыль последней сделки равняется нулю, то открывается такая же
      {
         GlobalVariableSet("AllowNewOrders", 0);
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble(LotsLastHistOrder(), 2);
         ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
         return;
      }
      if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
      || CountHistTrades() == 0)// Если последняя сделка прибыльная, то открывается ордер
      {
         if (GlobalVariableGet("AllowNewOrders") > 0) return;
         if (SignalBuy() && MaxOpenOrders > OrdersTotal())
         {
            ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);
            if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
            return;
         }
         if (SignalSell() && MaxOpenOrders > OrdersTotal())
         {
            ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);
            if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
            return;
         }
      }
      GlobalVariableSet("AllowNewOrders", 1);
   }
}

Попробуй так. Чувствую еще какая-нибудь бяка вылезет...

 
Всем привет,начал читать учебник MQL4(хочу научиться программировать),но там старая версия,что посоветуете сделать?Читать учебник,потом документацию?
 
LRA:
// ИХМО так нагляднее
Согласен!
 
linar:

Всем привет,начал читать учебник MQL4(хочу научиться программировать),но там старая версия,что посоветуете сделать?Читать учебник,потом документацию?

Если до этого на си программировал, то лучше посмотреть исходники бесплатных индикаторов попроще и советников и почитать справку.

Если не программировал вообще, то... посмотреть исходники бесплатных индикаторов попроще и советников и почитать справку. )))

Есть еще учебник на этом форуме: https://www.mql5.com/ru/forum/108883

 
A13ksandr:

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

Попробуй так. Чувствую еще какая-нибудь бяка вылезет...

Еще один шаг в перед - бот открыл одну сделку, правда на этом все и закончилось. Больше ничего не открывает и в журнале даже нет сообщений об каких либо попытках..
 
alvlaf:
Еще один шаг в перед - бот открыл одну сделку, правда на этом все и закончилось. Больше ничего не открывает и в журнале даже нет сообщений об каких либо попытках..

Блин, вот хотел же изначально только часть кода вставить правильного, но потом весь скопировал и ошибку эту не исправил. Должно быть так в последнем условии

         if (GlobalVariableGet("AllowNewOrders") == 0) return;

Но вообще-то он не должен был ни одной сделки заключить тогда. Какое-то из двух первых условий работает неверно. Пока исправь условие, будем посмотреть :)

Updade: верни OnDeinit на всякий случай.

void  OnDeInit()
{
   GlobalVariableSet("AllowNewOrders",1); 
} 
 
A13ksandr:

Блин, вот хотел же изначально только часть кода вставить правильного, но потом весь скопировал и ошибку эту не исправил. Должно быть так в последнем условии

Но вообще-то он не должен был ни одной сделки заключить тогда. Какое-то из двух первых условий работает неверно. Пока исправь условие, будем посмотреть :)

Updade: верни OnDeinit на всякий случай.


Попробовал, после одной сделки в минус начал открывать позиции на каждом тике.
 
alvlaf:
Попробовал, после одной сделки в минус начал открывать позиции на каждом тике.

Внеси в первые два условия первой строчкой

if (GlobalVariableGet("AllowNewOrders") == 1) return;

И попробуй первый тест на одной паре.

Брокер GrandCapital?

 
A13ksandr:

Внеси в первые два условия первой строчкой

if (GlobalVariableGet("AllowNewOrders") == 1) return;

И попробуй первый тест на одной паре.

Брокер GrandCapital?

//----------------------------------------------------------------------       
int OnInit()                     
{
   if (!GlobalVariableCheck("AllowNewOrders")) GlobalVariableSet("AllowNewOrders",1);
   return(INIT_SUCCEEDED);
}

//----------------------------------------------------------------------

void  OnDeInit()
{
   GlobalVariableSet("AllowNewOrders",1); 
//----------------------------------------------------------------------

void OnTick()
{
if (GlobalVariableGet("AllowNewOrders") == 1) return;
{
   if (CountTrades() == 0) // Количество ордеров должно равняться нулю
   {
      if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)))
      // Если последняя сделка убыточная, то открывается такая же, но с увеличенным лотом
      {
         GlobalVariableSet("AllowNewOrders", 0);
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble(LotsLastHistOrder()*Multiplier, 2);
         ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
         return;
      }
      if (GlobalVariableGet("AllowNewOrders") == 1) return;
      {
      if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0) 
      // Если прибыль последней сделки равняется нулю, то открывается такая же
      {
         GlobalVariableSet("AllowNewOrders", 0);
         Type = TypeLastHistOrder();
         if (Type == OP_BUY)  Price = Ask;
         if (Type == OP_SELL) Price = Bid;
         Lot = NormalizeDouble(LotsLastHistOrder(), 2);
         ticket = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
         return;
      }
      if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
      || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
      || CountHistTrades() == 0)// Если последняя сделка прибыльная, то открывается ордер
      {
         if (GlobalVariableGet("AllowNewOrders") == 0) return;
         if (SignalBuy() && MaxOpenOrders > OrdersTotal())
         {
            ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);
            if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
            return;
         }
         if (SignalSell() && MaxOpenOrders > OrdersTotal())
         {
            ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);
            if (ticket>0) GlobalVariableSet("AllowNewOrders", 0);
            return;
            }
         }
      }
      GlobalVariableSet("AllowNewOrders", 1);
      }
   }

}

 

Да, Гранд капитал. Правильно вставил? Что-то он опять перестал открывать сделки. 

 

 

Ребят, уже голову сломал. Как сделать чтоб советник выставлял отложки по максимумам и минимумам, например за 8 свечей, с тейком в 1/4 .

делаю примерно так:

double Vhod1=iHighest(Symbol(),0,MODE_HIGH,8,0);

 double Vhod2=iLowest(Symbol(),0,MODE_LOW,8,0); 

 double TP=((Vhod1-Vhod2)/4)+Vhod1; 


пробовал менять параметры, но пишет то стопы не верны, то выставит по цене 7.00000 непонятно откуда берет

Причина обращения: