Проблмы при тестировании на истории и он-лайн

 

Подскажите кто сможет плиз в чём проблема. При тестировании на истории позиция бай закрывается при открытии селл и наоборот как и заложено в коде. А в режиме визуального теста он-лайн при открытии противоположной позиции предыдущая не закрывается. ..да ещё и начинает появляться табличка с предложением на открытие ордера хотя в "свойствах" советника стоит галочка "не повторять сигналы". Помогите найти ошибку (как подозреваю в коде). Заранее благодарен.

 
hope:

Подскажите кто сможет плиз в чём проблема. При тестировании на истории позиция бай закрывается при открытии селл и наоборот как и заложено в коде. А в режиме визуального теста он-лайн при открытии противоположной позиции предыдущая не закрывается. ..да ещё и начинает появляться табличка с предложением на открытие ордера хотя в "свойствах" советника стоит галочка "не повторять сигналы". Помогите найти ошибку (как подозреваю в коде). Заранее благодарен.


Если подозреваешь что ошибка в коде, то ты обратился не по адресу. Пока из здесь присутствующих еще никто не научился читать код на чужом компьютере, да еще если этот комп находится неизвестно где. Или смени название темы "Ищу экстрасенса", или выложи часть кода, в котором ты считаешь находится ошибка.
 
По-моему, проблема просто в галке "Ручное подтверждение". Убери ее и все пойдет путем.
 
Vinin:
hope:

Подскажите кто сможет плиз в чём проблема. При тестировании на истории позиция бай закрывается при открытии селл и наоборот как и заложено в коде. А в режиме визуального теста он-лайн при открытии противоположной позиции предыдущая не закрывается. ..да ещё и начинает появляться табличка с предложением на открытие ордера хотя в "свойствах" советника стоит галочка "не повторять сигналы". Помогите найти ошибку (как подозреваю в коде). Заранее благодарен.


Если подозреваешь что ошибка в коде, то ты обратился не по адресу. Пока из здесь присутствующих еще никто не научился читать код на чужом компьютере, да еще если этот комп находится неизвестно где. Или смени название темы "Ищу экстрасенса", или выложи часть кода, в котором ты считаешь находится ошибка.

Я выкладывал код :(((( Сейчас ещё раз....
//+------------------------------------------------------------------+
//|                                                  MACD Sample.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       https://www.metaquotes.net// |
//+------------------------------------------------------------------+
 
extern double TakeProfit = 300;
extern double StopLoss = 300;
extern double Lots = 0.1;
extern double TrailingStop = 0;
 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double StochCurrentMain, StochPreviousMain;
   double StochCurrentSignal, StochPreviousSignal;
   double MAHightCurrent, MAHightPrevious, MALowCurrent, MALowPrevious;
   double PSARCurrent, PSARPrevious;
   int cnt, ticket;
// initial data checks
// it is important to make sure that the expert works with a normal
// chart and the user did not make any mistakes setting external 
// variables (Lots, StopLoss, TakeProfit, 
// TrailingStop) in our case, we check TakeProfit
// on a chart of less than 100 bars
   if(Bars<100)
     {
      Print("bars less than 100");
      return(0);  
     }
// to simplify the coding and speed up access
// data are put into internal variables
   StochCurrentMain=iStochastic(NULL,0,8,5,5,MODE_SMA,0,MODE_MAIN,1);
   StochPreviousMain=iStochastic(NULL,0,8,5,5,MODE_SMA,0,MODE_MAIN,2);
   StochCurrentSignal=iStochastic(NULL,0,8,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   StochPreviousSignal=iStochastic(NULL,0,8,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   MAHightCurrent=iMA(NULL,0,1,0,MODE_SMA,PRICE_HIGH,0);
   MAHightPrevious=iMA(NULL,0,1,0,MODE_SMA,PRICE_HIGH,1);
   MALowCurrent=iMA(NULL,0,1,0,MODE_SMA,PRICE_LOW,0);
   MALowPrevious=iMA(NULL,0,1,0,MODE_SMA,PRICE_LOW,1);
   PSARCurrent=iSAR(NULL,0,0.02,0.2,0);
   PSARPrevious=iSAR(NULL,0,0.02,0.2,1);
   
int BuyTotal=0,SellTotal=0;
int i;
 
//Подсчитываем отдельно бай и селл ордеры
for (i=0;i<OrdersTotal();i++) {
  if (OrderSelect(i,SELECT_BY_POS)) {
    if (OrderType()==OP_BUY) BuyTotal++;
    if (OrderType()==OP_SELL) SellTotal++;
    }
  }
  if(BuyTotal<1)
     {
      // no opened orders identified
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0);  
        }
      // check for long position (BUY) possibility
      if(StochCurrentMain>StochCurrentSignal && MAHightCurrent>PSARCurrent)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,0,0,"macd sample",16384,0,Blue);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
           }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
        }
      }
  for(i=OrdersTotal()-1;i>=0;i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if(OrderSymbol()==Symbol())
         {
            if(OrderType()==OP_BUY)
            {
               if(StochCurrentMain<StochCurrentSignal && MALowCurrent<PSARCurrent)
                  OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);
            }
         }
      }
   }            
  if(SellTotal<1)
     {   
      // check for short position (SELL) possibility
      if(StochCurrentMain<StochCurrentSignal && MALowCurrent<PSARCurrent)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,0,0,0,"macd sample",16384,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
        }
      return(0);
     }
   // it is important to enter the market correctly, 
   // but it is more important to exit it correctly...   
   for(i=OrdersTotal()-1;i>=0;i--)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if(OrderSymbol()==Symbol())
         {
            if(OrderType()==OP_SELL)
            {
               if(StochCurrentMain>StochCurrentSignal && MAHightCurrent>PSARCurrent)
                  OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
            }
         }
      }
   }
   return(0);
  }
// the end.
 
Scriptong:
По-моему, проблема просто в галке "Ручное подтверждение". Убери ее и все пойдет путем.

Не всё так просто...естественно галочки на ручном подтверждении не стоит. Более того первую позицию он открыл без выпендрёжей, а вот противоположную открывает не закрыв первую да ещё и ручной ордер выкладывает...
 
hope:
Vinin:
hope:

Подскажите кто сможет плиз в чём проблема. При тестировании на истории позиция бай закрывается при открытии селл и наоборот как и заложено в коде. А в режиме визуального теста он-лайн при открытии противоположной позиции предыдущая не закрывается. ..да ещё и начинает появляться табличка с предложением на открытие ордера хотя в "свойствах" советника стоит галочка "не повторять сигналы". Помогите найти ошибку (как подозреваю в коде). Заранее благодарен.


Если подозреваешь что ошибка в коде, то ты обратился не по адресу. Пока из здесь присутствующих еще никто не научился читать код на чужом компьютере, да еще если этот комп находится неизвестно где. Или смени название темы "Ищу экстрасенса", или выложи часть кода, в котором ты считаешь находится ошибка.

Я выкладывал код :(((( Сейчас ещё раз....

А что в логах пишется, какая ошибка выскакивает?
 
Vinin:
hope:
Vinin:
hope:

Подскажите кто сможет плиз в чём проблема. При тестировании на истории позиция бай закрывается при открытии селл и наоборот как и заложено в коде. А в режиме визуального теста он-лайн при открытии противоположной позиции предыдущая не закрывается. ..да ещё и начинает появляться табличка с предложением на открытие ордера хотя в "свойствах" советника стоит галочка "не повторять сигналы". Помогите найти ошибку (как подозреваю в коде). Заранее благодарен.


Если подозреваешь что ошибка в коде, то ты обратился не по адресу. Пока из здесь присутствующих еще никто не научился читать код на чужом компьютере, да еще если этот комп находится неизвестно где. Или смени название темы "Ищу экстрасенса", или выложи часть кода, в котором ты считаешь находится ошибка.

Я выкладывал код :(((( Сейчас ещё раз....

А что в логах пишется, какая ошибка выскакивает?

В редакторе?? 0 ошибок - 0 предупреждений
 
hope:
Vinin:

А что в логах пишется, какая ошибка выскакивает?

В редакторе?? 0 ошибок - 0 предупреждений

Не в редакторе, в терминале или в тестере.
 

Ты про это???

11:06:59 Expert Alligator 8 EURUSD,M1: loaded successfully
11:09:08 '1000253380': instant order sell 0.10 EURUSD at 1.4630 sl: 0.0000 tp: 0. 0000
11:09:09 '1000253380': request was accepted by server
11:09:09 '1000253380': request in process
11:09:09 '1000253380': order was opened : #6861978 sell 0.10 EURUSD at 1.4630 sl: 0.0000 tp: 0.0000
11:15:15 Old tick EURUSD1 1.46140/1.46170
11:15:15 Old tick EURUSD1440 1.46140/1.46170
11:15:15 Old tick EURUSD1 1.46150/1.46180
11:15:15 Old tick EURUSD1440 1.46150/1.46180
11:15:15 Old tick EURUSD1 1.46140/1.46170
11:15:15 Old tick EURUSD1440 1.46140/1.46170
11:18:28 '1000253380': instant order buy 0.10 EURUSD at 1.4624 sl: 0.0000 tp: 0. 0000
11:18:28 '1000253380': request was accepted by server
11:18:28 '1000253380': request in process
11:18:28 '1000253380': order was opened : #6862345 buy 0.10 EURUSD at 1.4624 sl: 0.0000 tp: 0.0000

 

Попробуй добавить проскальзывание

OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"macd sample",16384,0,Green);

 

Посмотрел код. Вот что увидел.

1. При подсчете ордеров если вызываете OrderSelect с параметром SELECT_BY_POS, то надо указывать и 3-й параметр. Хотя это может быть и не критично. Не проверял.

2. Если закрываете ордера, то OP_SELL закрывают по ASK, а OP_BUY по BID.

Да и еще я бы сначала сделал проверку на закрытие позиций, потом подсчет Бай и Селл ордеров, а потом уже открытие. Имено поэтому и не работает как надо.

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