Проблемы, обнаруженные при обратном тестировании, и невозможность найти первопричину!

 

Пожалуйста, обратитесь к скриншоту ниже после обратного тестирования.

3 вопроса о странных вещах также показаны на снимке.

Я прочитал инструкцию iCustom и проверил советника и индикатор снова и снова, но так и не смог найти причину.

Пожалуйста, помогите срочно и большое спасибо!

(*. Вы можете нажать на скриншот, чтобы открыть и увеличить его, чтобы увидеть вопросы более четко)

Это критические коды для индикатора "Reverse" (другие коды были заменены на "...", чтобы было понятно, что это критические коды):

int OnInit()
  {
   IndicatorBuffers(8);
   ....
   SetIndexBuffer(6,ExtBuffer1);
   ....
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   ...
   ...

   for(i=limit-1; i>=0; i--)
     {
      ...
      Value=...;
      ExtBuffer0[i]=MathLog((1+Value)/(1-Value));
      if(ExtBuffer0[i]>0) ExtBuffer1[i]=10;
      else ExtBuffer1[i]=-10;
     }

   ...
   ...
  }

Это критические коды в советнике для использования индикатора (другие коды были заменены на "...", чтобы было понятно, для каких критических кодов):

...
...

void Reverse()
  {
   Joy1=iCustom(Symbol(),0,"Reverse",6,1);
   Joy2=iCustom(Symbol(),0,"Reverse",6,2);
  }

void openPosition()
  {
   ...
   if(Joy2<=-10 && Joy1>=10) 
    {
    r=OrderSend(Symbol(),OP_BUY,lotSize,Ask,slippage,0,0,TradeComment,MAGIC,0,clrMediumBlue);
    ...
    }
   else if(Joy2>=10&& Joy1<=-10) 
    {
    r=OrderSend(Symbol(),OP_SELL,lotSize,Bid,slippage,0,0,TradeComment,MAGIC,0,clrMediumVioletRed);
    ...
    }
   ...
   }
void closePosition()
  {
   ...
    if(openType==OP_BUY && Joy2>=10 && Joy1<=-10)
     for(i=OrdersTotal();i>=1; i--)
         if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==MAGIC)
           {
            r=OrderClose(OrderTicket(),OrderLots(),Bid,slippage,clrDodgerBlue);
            ...
            }
   else if(openType==OP_SELL && Joy2<=-10 && Joy1>=10) 
    for(i=OrdersTotal();i>=1; i--)
         if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES)==true && OrderMagicNumber()==MAGIC)
           {
            r=OrderClose(OrderTicket(),OrderLots(),Ask,slippage,clrDeepPink);
            ...
            }
   ...  
  }
void OnTick()
  {
   ...
   Reverse();
   openPosition();
   closePosition(); 

}

 

Теперь я заново создал файл индикатора, и проблема с рисованием желтой линии была решена.

Однако еще 2 проблемы до сих пор не решены. Пожалуйста, помогите!

 

Вероятно, проблема связана с вашим индикатором

 if(ExtBuffer0[i]>= 0) ExtBuffer1[i]=10;
      else ExtBuffer1[i]=-10;

проверьте также ваше EmptyValue

 
ffoorr:

Проблема, вероятно, связана с вашим индикатором

проверьте также ваш EmptyValue

Уважаемый ffoorr, не должно быть пустого значения, как вы можете видеть с желтой линией.

 

что если if(ExtBuffer0[i]==0)

следуя тому, что находится в вашем SetIndexEmptyValue, у вас была бы дыра, ничего,

Линия не будет напечатана до следующих двух данных.


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

Иначе никто не может знать, не видя кода индикатора.


Вы используете какой-нибудь индикатор fisher?

 

Уважаемый ffoorr, большое спасибо за помощь. Но я проверил индикатор с кодами и могу подтвердить, что пустого значения нет.

Я переустановил tick story и MT4, проблема осталась. Так что я продолжаю проверку.

 

jollydragon

если нет SetindicatorEmptyValue, то пустым значением будет EMPTY_VALUE

тогда если вы напишите код if( ExtBuffer1[i]!= 10 ) Open_Order()

если ExtBuffer1[i] == EMPTY_VALUE, у вас будет заказ.


Но я также не могу знать, является ли это причиной проблемы.

 

Уважаемый ffoorr, я добавил коды, чтобы показать данныеExtBuffer1[i], еслиExtBuffer1 не 10 или -10. В итоге я ничего не получил, и это доказывает, чтоExtBuffer1 равен 10 или -10 для каждого бара.

Я также обновил индикатор до 2 буферов с 2 линиями. Вы можете видеть 1 белую и 1 желтую. Я использую данные желтой линии в своем советнике.

Пожалуйста, обратитесь к данным ниже, вы можете видеть, когда ордер меняется, это точно вызвано тем, что данные желтой линии меняются. '1' ниже означает данные желтой линии на баре непосредственно перед открытием или закрытием ордера, '2' означает данные желтой линии на баре перед '1'. Именно так я обрабатываю открытие и закрытие ордеров.

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

Тем не менее, вы можете видеть, что изменение ордеров по-прежнему не соответствует желтой линии (сигналу).

Это так странно! Что может быть возможной первопричиной? Кто может помочь и я буду очень благодарен?

2013.04.30 04:00:00:    1: -10.0, 2:  10.0-error:       0

2013.04.30 08:30:01:    1:  10.0, 2: -10.0-error:       0

2013.04.30 08:30:02:    1:  10.0, 2: -10.0-error:       0

2013.04.30 09:30:00:    1: -10.0, 2:  10.0-error:       0

2013.04.30 09:30:00:    1: -10.0, 2:  10.0-error:       0

2013.04.30 16:30:00:    1:  10.0, 2: -10.0-error:       0

2013.04.30 16:30:00:    1:  10.0, 2: -10.0-error:       0

2013.05.01 18:00:00:    1: -10.0, 2:  10.0-error:       0

2013.05.01 18:00:00:    1: -10.0, 2:  10.0-error:       0

2013.05.01 22:00:00:    1:  10.0, 2: -10.0-error:       0

2013.05.01 22:00:00:    1:  10.0, 2: -10.0-error:       0

2013.05.01 22:30:00:    1: -10.0, 2:  10.0-error:       0

2013.05.01 22:30:00:    1: -10.0, 2:  10.0-error:       0

2013.05.02 15:30:00:    1:  10.0, 2: -10.0-error:       0

2013.05.02 15:30:00:    1:  10.0, 2: -10.0-error:       0

2013.05.02 16:03:26:    1:  10.0, 2:  10.0-error:       0

 
О, Боже. Я все еще ничего не понимаю в этом. Что случилось?
 
jollydragon: О, Боже. Я до сих пор не имею ни малейшего представления об этом. Что не так?
  1. Откуда, черт возьми, мы должны знать? Вы не выложили весь код (ни индикатора, ни iCustom, ни циклов).
  2. Вы говорите, что индикатор все еще имеет 10, но на (первом) изображении видны пробелы. Мы понятия не имеем, где находился ваш курсор. Был ли он над разрывом?
  3. Вы не знаете, потому что у вас нет информации. Добавьте операторы print до и внутри if, включая значения переменных, и отследите это.
 

Уважаемые, на самом деле я вычитал критические коды для вас, чтобы сэкономить ваше время.

Тем не менее, ваша помощь высоко ценится, и поэтому позвольте мне прикрепить файлы как советника, так и индикатора.

Пожалуйста, обратите внимание, что имена файлов изменились автоматически после прикрепления. Между двумя словами вставлена случайная буква. В моем компьютере это "Trade Joy" и "Solar Joy".

С нетерпением жду решения :-)

Файлы:
tradebjoy.mq4  12 kb
trademjoy.ex4  17 kb
solarxjoy.mq4  7 kb
solarcjoy.ex4  8 kb
Причина обращения: