MQL4. Закрытие по Зигзаг - страница 2

 
Vladislav Andruschenko:

я исправлял не те ошибки. 

и всегда проверяю на непустое значение. неважно что там установлено в переменной пустого значения.  


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

Некоторые перед перестроением в другой ряд всегда включают поворотку и не всегда смотрят в зеркало. А я сначала смотрю в зеркало, а потом думаю включать-ли поворотку...

Если в индикаторе ДВА буфера, см. скрин, то выйти из цикла поиска значений этих буферов должен быть именно таким

if(Zig_0 > 0 && Zig_1 > 0) break;
 

но в данном случае нам нужен только последний зигзаг а не оба и верхний и нижний? 

Ваш код также имеет место быть при выходе из цикла для определения например направления волны.  

 
Anna_89:

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

попробуйте так:

 

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
#property copyright "Mr. Gold"
#property link      "anna.furmanova@yandex.ru"
#property version   "1.00"
#property strict
#include <My Lib.mqh>

extern string ZigXard             = "===== Параметры ZigXard =====";
extern int ExtDepth               = 57;
extern int ExtDeviation           = 65;
extern int ExtBackstep            = 40;

extern int MaxRisk                = 2;
extern int MG                     = 888;
extern double Lots                = 0.01;

extern bool Clock                 = true;
extern int TestingMode            = 1;

static int PreBars=0;
static int DT=0;

datetime Today=0;
static int prevtime=0;
int tiket,cnt,total=OrdersTotal();
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
string CurDay()
  {
   string CurDay;
   switch(DayOfWeek())
     {
      case 0: CurDay = "Вс";break;
      case 1: CurDay = "Пн";break;
      case 2: CurDay = "Вт";break;
      case 3: CurDay = "Ср";break;
      case 4: CurDay = "Чт";break;
      case 5: CurDay = "Пт";break;
      case 6: CurDay = "Сб";break;
     }
   return(CurDay);
  }
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   if(TestingMode>0)
     {
      if(TestingMode==1)
        {
         if(Bars == PreBars) return(0);
         else PreBars=Bars;
           } else {
         if(Bars!=PreBars)
           {
            DT=0;
            PreBars=Bars;
           }
         if(TimeCurrent() < Time[0]+DT) return(0);
         else DT=DT+Period()*60/TestingMode;
        }
     }
   if(Clock) ObjectSetText("Clock",TimeToStr(TimeCurrent(),TIME_MINUTES)+", "+CurDay(),20,"Tahoma",Maroon);
   if(GlobalVariableCheck("g_TestingMode")==true)
      TestingMode=GlobalVariableGet("g_TestingMode");

   if(DayOfWeek()==0 || DayOfWeek()==6) return(0);
   if(!IsTradeAllowed()) return(0);
   if(Time[0]==Today) return(0);
   Today=Time[0];

   double Lot=GetLot(MaxRisk);
   if(Lot==0) {Alert("Недостаточно средств!");return(0);}

   int signal;

   double y3=0,y3_1=0,y2=0,y2_1=0,y1=0,y1_1=0,Zig_0,Zig_1;
   int    x3,x3_1,x2,x2_1,x1,x1_1;

   for(int i=1; i<Bars; i++)
     {
      Zig_0=iCustom(Symbol(),0,"Bi D ZigXard-Pointer-V3",ExtDepth,ExtDeviation,ExtBackstep,0,i);
      if(Zig_0!=0)
                if(y1==0) { x1=i; y1=Zig_0; }
      else if(y2==0) { x2=i; y2=Zig_0; }
      else if(y3==0) { x3=i; y3=Zig_0; }
        {
         if(Zig_0>0 && Zig_0!=EMPTY_VALUE)
           {
            tiket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",MG,0,Red);
            break;
           }
        }
      Zig_1=iCustom(Symbol(),0,"Bi D ZigXard-Pointer-V3",ExtDepth,ExtDeviation,ExtBackstep,1,i);
      if(Zig_1!=0)
                if(y1_1==0) { x1_1=i; y1_1=Zig_1; }
      else if(y2_1==0) { x2_1=i; y2_1=Zig_1; }
      else if(y3_1==0) { x3_1=i; y3_1=Zig_1; }
        {
         if(Zig_1>0 && Zig_1!=EMPTY_VALUE)
           {
            tiket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",MG,0,Red);
            break;
           }
        }
     }
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
      if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
        {
         for(int i=1; i<Bars; i++)
           {
            Zig_0=iCustom(Symbol(),0,"Bi D ZigXard-Pointer-V3",ExtDepth,ExtDeviation,ExtBackstep,0,i);
            Zig_1=iCustom(Symbol(),0,"Bi D ZigXard-Pointer-V3",ExtDepth,ExtDeviation,ExtBackstep,1,i);

            if(OrderType()==OP_BUY)
              {
               if(Zig_1>0 && Zig_1!=EMPTY_VALUE)
                 {
                  OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);
                  return(0);
                 }
              }
            else
              {
               if(Zig_0>0 && Zig_0!=EMPTY_VALUE)
                 {
                  OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);
                  return(0);
                 }
              }
           }
        }
     }

   return(0);
  }
//+------------------------------------------------------------------+

 нет библиотеки - не могу проверить у себя 

 
Vladislav Andruschenko:

но в данном случае нам нужен только последний зигзаг а не оба и верхний и нижний? 

Ваш код также имеет место быть при выходе из цикла для определения например направления волны.  

Влад, ну я-же сказал о коде который надо-бы посмотреть.

Там поставлено условие

if(Zig_0 > Zig_1)

и наоборот

if(Zig_0 < Zig_1)

Потому и надо оба значения сразу. Как это будет работать - вопрос третий. Программист хочет так, значит так и надо... А когда работать будет, но не совсем так как ожидалось будем отвечать на другие вопросы...

 

;-) согласен 

 
Vladislav Andruschenko:

;-) согласен 

Ну слава Богу... И в индикаторе

   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0); 

Выходит что проверка на пустое значение неуместно.

 
Alexey Viktorov:

Ну слава Богу... И в индикаторе

Выходит что проверка на пустое значение неуместно.

я бы сказал лучше так : "не имеет смысла" 
 
Vladislav Andruschenko:
я бы сказал лучше так : "не имеет смысла" 

Теперь я ;-) согласен

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