Помогите исправить ошибку в коде. 'DrawArrow' - wrong parameters count

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Игорь
346
Игорь  
//+------------------------------------------------------------------+
//|                                     Test advisor on DeMarker.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                         https:/goga342@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
//------------------параметры советника -------------------------------
extern double lots=0.01; //
extern int Magic=1111678111;
extern int Slippage=1;
double sell_level=0.7;
double buy_level=0.3;
//всякие константы
#define INFO_LABEL_NAME   "InfoLabel"
#define ARROW_NAME_PREFIX "MyArrow_"
#define ARROW_SELL_CODE   242
#define ARROW_BUY_CODE    241
//bool DrawInfo;
//double ExtBufferSilver[2]; // Объявление массива для графики ( стрелки на покупку или продажу)
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
  {
   if(Digits==3 || Digits==5)//EURJPY 125.429, EURUSD 1.32164
      if(Digits==2 || Digits==4)// AUDJPY 87.75, EURAUD 1,4271
        {
         Slippage*=10;
        }
   return(INIT_SUCCEEDED);
  }
//-------------------------------------------------------------------
int deinit()
  {
   ObjectsDeleteAll();
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
int start()
  {
//
   int sit;
   string Text[2]; // Объявление массива
   color Color[4]; // Объявление массива цветов
   Text[0]="Покупаем"; // Текст для различных ситуаций
   Text[1]= "Продаём";
//Text[2]="Закрываем Buy";
//Text[3]="Закрываем Sell";
//
   Color[0]=DeepSkyBlue; // Цвет объекта ..
   Color[1]=LightPink; // .. для различных ситуаций
   Color[2]=Yellow;
   Color[3]=Yellow;
//
   ObjectCreate("DeMarker",OBJ_LABEL,0,0, 0);// Создание объекта "signal" на покупку или продажу
   ObjectSet("DeMarker", OBJPROP_CORNER, 0); // Привязка угола (0-верхний левый угол, 3-нижний левый угол, 1-верхний правый угол, 4-нижний правыйвый угол)
   ObjectSet("DeMarker", OBJPROP_XDISTANCE, 10);// Координата Х
   ObjectSet("DeMarker", OBJPROP_YDISTANCE, 15);// Координата Y
                                                //
   int ticket;

   double DM=iDeMarker(NULL,0,14,0);
   double DM1=iDeMarker(NULL,0,14,1);
   
 //фиксируем наличие пересечений
    bool CrossSell = (DM1 > sell_level && DM < sell_level);
    bool CrossBuy  = (DM1 < sell_level && DM > sell_level);  
   

   if(CountSell()==0 && DM>sell_level && DM1>sell_level)// открытие продаж
     {
      ticket=OrderSend(Symbol(),OP_SELL,lots,Bid,Slippage,0,0,"советник",Magic,0,clrNONE);
      sit=1;
     }
//
   if(CountSell()>0 && DM<buy_level && DM1<buy_level)// закрытие продаж
     {
      for(int i=OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
           {
            if(OrderMagicNumber()==Magic && OrderType()==OP_SELL)
               if(OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,clrNONE))
                  Print("Ошибка открытия ордера на покупку !");
           }
        }
     }
//+------------------------------------------------------------------+
   if(CountBuy()==0 && DM<buy_level && DM1<buy_level)// открытие покупок
     {
      ticket=OrderSend(Symbol(),OP_BUY,lots,Ask,Slippage,0,0,"советник",Magic,0,clrNONE);
     //вешаем срелки
      string ArrowName = StringConcatenate(ARROW_NAME_PREFIX, TimeToString(Time[0]));
      if(CrossBuy)  DrawArrow(ArrowName, Time[0], Open[0], ARROW_BUY_CODE,  clrBlue);
      sit=0;
     }
//
   if(CountBuy()>0 && DM>sell_level && DM1>sell_level)// закрытие покупок
     {
      for(int i=OrdersTotal()-1; i>=0; i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
           {
            if(OrderMagicNumber()==Magic && OrderType()==OP_BUY)
               if(!OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,clrNONE))
                  Print("Ошибка открытия ордера на продажу!");
           }
        }
     }
//---------------------------------------------------------------
// Изменение свойств графического объекта (текст на покупку или продажу)
   ObjectSetText("DeMarker",Text[sit],18,"Arial",Color[sit]);
   return(0);
  }
//+------------------------------------------------------------------+
int CountSell()//проверкна открытие ордеров на продажу
  {
   int count=0;

   for(int trade=OrdersTotal()-1; trade>=0; trade--)
     {
      if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true)
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_SELL)
           {
            if(OrderType()==OP_SELL)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
int CountBuy()// проверкна открытие ордеров на покупку
  {
   int count=0;
   for(int trade=OrdersTotal()-1; trade>=0; trade--)
     {
      if(OrderSelect(trade,SELECT_BY_POS,MODE_TRADES)==true)
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic && OrderType()==OP_BUY)
           {
            if(OrderType()==OP_BUY)
               count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
void DrawArrow()
{
  ObjectCreate(0,"стрелка",OBJ_ARROW,0,0,0,0,0); // создадим стрелку на покупку
ObjectSetInteger(0,"стрелка",OBJPROP_ARROWCODE,241 ); // установим код стрелки
ObjectSetInteger(0,"стрелка",OBJPROP_TIME,Time[0]); // зададим время
ObjectSetDouble(0,"стрелка",OBJPROP_PRICE,Close[0]);// зададим цену
ObjectSetInteger(0, "стрелка", OBJPROP_COLOR, clrBlue);       // установим цвет стрелки
ChartRedraw(0); // перерисуем окно
} 
Nikolai Semko
6752
Nikolai Semko  
Игорь:

Вы обращаетесь к функции:

DrawArrow(ArrowName, Time[0], Open[0], ARROW_BUY_CODE,  clrBlue);

Хотя она имеет формат:

void DrawArrow()
Сергей Таболин
2840
Сергей Таболин  
Функция не имеет входных параметров, а вы пихаете в неё что-то - вот и ошибка вылазит.
Nikolay Kositsin
450581
Nikolay Kositsin  

А это что за каламбур:

if(Digits==3 || Digits==5)//EURJPY 125.429, EURUSD 1.32164
      if(Digits==2 || Digits==4)// AUDJPY 87.75, EURAUD 1,4271
        {
         Slippage*=10;
        }

По логике вещей, это будет вот так:

if(Digits==3 || Digits==5 //EURJPY 125.429, EURUSD 1.32164
 || Digits==2 || Digits==4)// AUDJPY 87.75, EURAUD 1,4271
   {
    Slippage*=10;
   }
Alexey Viktorov
28049
Alexey Viktorov  

Один другого хлеще...

Хоть так...

if(Digits==3 || Digits==5)//EURJPY 125.429, EURUSD 1.32164
      if(Digits==2 || Digits==4)// AUDJPY 87.75, EURAUD 1,4271
        {
         Slippage*=10;
        }

или так

if(Digits==3 || Digits==5 //EURJPY 125.429, EURUSD 1.32164
 || Digits==2 || Digits==4)// AUDJPY 87.75, EURAUD 1,4271
   {
    Slippage*=10;
   }

а можно и так...

if(Digits == пофигу_какой)
Slippage*=10;
Почти одинаково будет неправильно работать...
Vitaly Muzichenko
14110
Vitaly Muzichenko  
Alexey Viktorov:

Один другого хлеще...

Хоть так...

или так

а можно и так...

Почти одинаково будет неправильно работать...

:)  Nikolay Kositsin это и имел ввиду, что код не верный

Игорь
346
Игорь  
Vitaly Muzichenko:

:)  Nikolay Kositsin это и имел ввиду, что код не верный

Всем привет. Что то я совсем запутался с этими стрелками. Кто нибудь пните меня по нужному вектору. 

Ihor Herasko
21874
Ihor Herasko  
Игорь:

Всем привет. Что то я совсем запутался с этими стрелками. Кто нибудь пните меня по нужному вектору. 

Напишите просто:

DrawArrow();
Игорь
346
Игорь  
Ihor Herasko:

Напишите просто:

Спасибо
Игорь
346
Игорь  
Игорь:
Спасибо

У меня появился вопрос. Что делать с этой строкой?

if(CrossBuy)  DrawArrow(ArrowName, Time[0], Open[0], ARROW_BUY_CODE,  clrBlue);

Или DrawArrow(), пойдёт отдельной функцией?

Это будет выгладить так:

void DrawArrow();
{
ObjectCreate(0,"стрелка",OBJ_ARROW,0,0,0,0,0); // создадим стрелку на покупку
ObjectSetInteger(0,"стрелка",OBJPROP_ARROWCODE,242 ); // установим код стрелки
ObjectSetInteger(0,"стрелка",OBJPROP_TIME,Time[0]); // зададим время
ObjectSetDouble(0,"стрелка",OBJPROP_PRICE,Close[0]);// зададим цену
ObjectSetInteger(0, "стрелка", OBJPROP_COLOR, clrBlue);       // установим цвет стрелки
ChartRedraw(0); // перерисуем окно
} 

или просто надо добавить

SetIndexStyle(0,DRAW_LINE,242);
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий