Ребята вот эксперт и 2 индюка, подскажите почему эксперт не работает с ними (конкретно в закрытие длинных позиций)

 
//+------------------------------------------------------------------+
//|                                                   ADX_System.mq4 |
//|                                                           System |
//|                                                   work_a@ukr.net |
//+------------------------------------------------------------------+
#property copyright "System"
#property link      "work_a@ukr.net"
#include <stdlib.mqh> 
extern double Lots =50;
extern double StopLoss = 145;
extern double StopLossShort = 240;
extern double TrailingStop = 55;
extern double TrailingStopShort= 65;
extern double TrailingTakeProfit = 345;
extern double TrailingStopLoss = 85;
extern double TrailingTakeProfitShort= 275;
extern double TrailingStopLossShort = 85;
extern double MovingShift  = 0;
extern double St_mini=11.6;            // Миним.  уровень стохастик
extern double St_maxi=24.35;
extern double St_max=84.05; 
extern double St_maxmi=51.05; 
extern double St_minishort=71.55; 
extern double St_maxishort = 87.55;
extern double St_sred = 50.55;
extern int Kperiod=9;
extern int Dperiod=3;
extern int slowing=5;
extern int FType=0;
extern int P1=25;
extern int D1=16;
extern int A1=38;
extern int P2=0;
extern int D2=0;
extern int A2=0;
extern int Delay=0;
extern double Ripple=0.08; 
int FilterSize=0;
extern int BarShift= -1;
int start()
 {
         
    double maC10, maC11, maC12, maC13, maC111, maC112,
     maC15, maC16 ; 
     double maC11Short, maC12Short, maC13Short, maC14Short,
      Stoc, StocSignal, Stoc1, StocSignal1;
     double DigFil, DigFil1, DigFil2, DigFil3, DigFilMA0, DigFilOpen0 ;
     int cnt, ticket,ticket1,total; 
      
      
       DigFil=iCustom( NULL, 0, "DigitalFilterMA", 0, 0);
     DigFil1=iCustom( NULL, 0, "DigitalFilterOpen", 0, 0);
   
     
     
  ////////////////////////////////  
   if(Bars<100)
     {
      Print("bars less than 100");
      return(0);  
     }
   if (TrailingTakeProfit<10)
     {
      Print("TrailingTakeProfit less than 10");
      return(0);  // check TakeProfit
     }
  //////////////////////////////////////////////  
    
      // long position (BUY) 
   if(Volume[0]>1) return;
   //maC10=iMA(NULL,0,20,MovingShift,MODE_EMA,PRICE_MEDIAN,0);
      Stoc=iStochastic(NULL,0,Kperiod,Dperiod,slowing,MODE_SMA,1,MODE_MAIN,0); 
      Stoc1=iStochastic(NULL,0,Kperiod,Dperiod,slowing,MODE_SMA,1,MODE_MAIN,1); 
      StocSignal=iStochastic(NULL,0,Kperiod,Dperiod,slowing,MODE_SMA,1,MODE_SIGNAL,0); 
      StocSignal1=iStochastic(NULL,0,Kperiod,Dperiod,slowing,MODE_SMA,1,MODE_SIGNAL,1);
    
     
      
      
      total = OrdersTotal();
      if(total<1) 
     {
      if(AccountFreeMargin()<(20000))
        {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0);  
        }
      if(StocSignal < Stoc  && StocSignal < St_maxi && StocSignal > StocSignal1 && StocSignal > St_mini)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Bid-StopLoss*Point,0,"adx sample",0,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); 
        }
      if(StocSignal<Stoc && StocSignal<StocSignal1 && StocSignal>St_minishort && StocSignal<St_maxishort) //StocSignal < StocSignal1 && maC15 < maC16 && Stoc > St_maxmi 
        {
         ticket1=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Ask+StopLossShort*Point,0,"macd sample",0,0,Red);///Ask+21.50,Bid-11.5
         if(ticket1>0)
           {
            if(OrderSelect(ticket1,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError());
          return(0);  
        }
        return(0);
     }
     if(Volume[0]>1) return;
  for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)  
          // long position is opened
           {
                 if(DigFil1>DigFil)//Stoc>75 StocSignal > St_max &&  Stoc>StocSignal  DigFilOpen0 < Low[1]         && Close[1]>Close[2] DigFil < DigFil1 DigFil < DigFil1 && DigFil1 > DigFil2 && DigFil2 > DigFil3
                {
                 OrderClose(OrderTicket(),Lots,Bid,3,Green); // close position
                 return(0); // exit
                }
            }
          else // go to short position              
            { 
            if(StocSignal < St_maxi)// maC11Short > maC12Short &&  maC12Short < maC13Short Low[0]>DigFilOpen0 
              {
               OrderClose(OrderTicket(),Lots,Ask,3,White); // close position
               return(0); // exit
              }
            } 
         }
       }  
   return(0);
 }
Файлы:
2adaamf.rar  4 kb
 
if(OrderType()==OP_BUY) {  // long position is opened          
    if(DigFil1>DigFil    {
                 OrderClose(OrderTicket... ... ...

4678457a, Ты бы выложил график с этими индюками. С теми параметрами, что задействованы в эксперте !


Может это условие (DigFil1>DigFil)// никогда не выполняется?

 
rid:
if(OrderType()==OP_BUY) {  // long position is opened          
    if(DigFil1>DigFil    {
                 OrderClose(OrderTicket... ... ...

4678457a, а где индюки то? Ты бы выложил график с этими индюками.

Может это условие (DigFil1>DigFil)// никогда не выполняется?

Добрый день rid. Коды индикаторов лежат чуть выше твоего ответа см. прикреплённые файлы: 2adaamf.rar

А если хочешь видеть эти индикаторы при тестировании вот пожалуйста :

 
for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)  
          // long position is opened
           {
                 if(DigFil1>DigFil)//                {
                 OrderClose(OrderTicket ... ...

Я почти не разбираюсь в схемотехнике индикаторов, поэтому и попросил выложить график!

Но условие закрытия позиции в эксперте if(DigFil1>DigFil //...

на мой взгляд задано некоректно!

Видимо нужно задать закрытие иначе: Задать именно пересечение линий индикаторов, а не постоянное зависание одной линии над другой.

Кроме того, вот этот кусочек кода выше - в блоке закрытия мне вообще не понятен! Может быть он и работает, но выражение

if(OrderType()<=OP_SELL &&

мне не ясно!

Почему бы не "оформить" этот блок - "по человечески" ? Чтобы не выворачивать мозги наизнанку! Вот так, как я делал когда -то -

'Закрытие позиций. По сигналу индикатора.'

 
rid:
for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)  
          // long position is opened
           {
                 if(DigFil1>DigFil)//                {
                 OrderClose(OrderTicket ... ...

Я почти не разбираюсь в схемотехнике индикаторов, поэтому и попросил выложить график!

Но условие закрытия позиции в эксперте if(DigFil1>DigFil //...

на мой взгляд задано некоректно!

Видимо нужно задать закрытие иначе: Задать именно пересечение линий индикаторов, а не постоянное зависание одной линии над другой.

Кроме того, вот этот кусочек кода выше - в блоке закрытия мне вообще не понятен! Может быть он и работает, но выражение

if(OrderType()<=OP_SELL &&

мне не ясно!

Почему бы не "оформить" этот блок - "по человечески" ? Чтобы не выворачивать мозги наизнанку! Вот так, как я делал когда -то -

'Закрытие позиций. По сигналу индикатора.'







Роман, я пробовал вставлять другое условие на закрытие длинной позиции и всё работает например ( Stoc>80) в код эксперта, значит причина именно в условии (DigFil1>DigFil) , либо в обозначении индикаторов как переменных DigFil1=iCustom(NULL,0,"DigitalFilterOpen",0,0);, да кстати если индикаторы рисуются в тестере значит они работают.

 
     DigFil=iCustom( NULL, 0, "DigitalFilterMA", 0, 0);
     DigFil1=iCustom( NULL, 0, "DigitalFilterOpen", 0, 0);
// после этих строчек вставить : 
   //-------------------------------------------------------
  double Delta = (DigFil1-DigFil) ;
  Comment(Delta );

А ты смотрел, что там в тестере журнал печатает? Есть ли ошибки?

Можно попробовать вывести в комментарий условие закрытия (см. выше) и отследить. Выполняется оно или нет. Запустить визуальный режим. Т.е. в визуальном режиме в тестере вывести на график индикаторы с параметрами советника. И при пересечении линий индикаторов смотреть в левом верхнем углу графика, - меняется ли знак Дельты.

 

Ну вот. Решил я проверить этот эксперт и вместо сделок получаю одни ошибки в журнале.

DigitalFilterMA GBPUSD,H1: Library call is not allowed. Indicator cannot run.

Для запуска индикаторов :

"Внимание! Для работы требуется три дополнительных DLL
содержащих блок математической обработки - bdsp.dll, lapack.dll, mkl_support.dll,
которые должны быть установлены в C:\Windows\System32\ или рядом с DF.dll в \experts\libraries\"

А где эти DLL ? У тебя они вставлены, - все три?


 

В код добавить #import "DF.dll" и убрать параметры фильтра в глобальных переменных далее изменить код связанный с индикаторами на

DigFil=iCustom(NULL,0,"DigitalFilterOpen",0,23,16,38,0,0,0,0,0.08,0,0,0,0);
DigFil1=iCustom(NULL,0,"DigitalFilterMA",0,25,11,38,0,0,0,0,0.08,0,-1,0,0); где как ты видишь указаны эти глобальные переменные. И всё ОКей

 
rid:

Ну вот. Решил я проверить этот эксперт и вместо сделок получаю одни ошибки в журнале.

DigitalFilterMA GBPUSD,H1: Library call is not allowed. Indicator cannot run.

Для запуска индикаторов :

"Внимание! Для работы требуется три дополнительных DLL
содержащих блок математической обработки - bdsp.dll, lapack.dll, mkl_support.dll,
которые должны быть установлены в C:\Windows\System32\ или рядом с DF.dll в \experts\libraries\"

А где эти DLL ? У тебя они вставлены, - все три?

Да эти файлы можно найти в инете и вставить как написано в папки

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