Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 509

 
Anton Razmyslov:

Люди добрые помогите с компиляцией советника очень прошу, в программировании не силен.

Вот такие ошибки выдает при компиляции  'delete' - name expected

красным выделена ошибка в коде

void delete(int type){.

..............

говорит нельзя так называть. назовите функцию другим именем.

а вот это "not all control paths return a value" о том, что функция не имеет обратного пути и не возвращает никакого значения, напишите там return(0); перед последней "}" функции

 
Спасибо большое!
 
Tema97:
Добрый день всем) поделитесь кодом на передвижной стоп лосс - чтоб за ценой ехал ))) Заранее спасибо 
//---------------------------------
void Trailing3(int Mag,string Symb,int Dist,int Shag,bool Isp_shag,bool Isp_bezubitok)
  {
   double dist=0,shag;
   if(Digits==3 || Digits==5)
      dist=Dist*10*Point; shag=Shag*10*Point;
   if(Digits==2 || Digits==4)
      dist=Dist*Point; shag=Shag*Point;

   for(int pos=OrdersTotal()-1; pos>=0; pos--)
     {
      int res=OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
      if(OrderMagicNumber()==Mag && OrderSymbol()==Symb)
        {
         if(OrderType()==OP_BUY)
           {
            if(!Isp_shag && !Isp_bezubitok && NormalizeDouble(Bid-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
               OrderModifyX3(OrderTicket(),0,Bid-dist,OrderTakeProfit(),0,clrTeal);
            if(Isp_shag && !Isp_bezubitok && NormalizeDouble(Bid-OrderOpenPrice(),Digits)>=NormalizeDouble(shag,Digits) && 
               NormalizeDouble(Bid-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
               OrderModifyX3(OrderTicket(),0,Bid-dist,OrderTakeProfit(),0,clrTeal);
            if(!Isp_shag && Isp_bezubitok && NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(OrderOpenPrice(),Digits) && 
               NormalizeDouble(Bid-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
               OrderModifyX3(OrderTicket(),0,Bid-dist,OrderTakeProfit(),0,clrTeal);
            if(Isp_shag && Isp_bezubitok && NormalizeDouble(Bid-OrderOpenPrice(),Digits)>=NormalizeDouble(shag,Digits) && 
               NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(OrderOpenPrice(),Digits) && NormalizeDouble(Bid-OrderStopLoss(),Digits)>NormalizeDouble(dist,Digits))
               OrderModifyX3(OrderTicket(),0,Bid-dist,OrderTakeProfit(),0,clrTeal);
           }
         else  if(OrderType()==OP_SELL)
           {
            if(!Isp_shag && !Isp_bezubitok && NormalizeDouble(OrderStopLoss()-Ask,Digits)>NormalizeDouble(dist,Digits))
               OrderModifyX3(OrderTicket(),0,Ask+dist,OrderTakeProfit(),0,clrCrimson);
            if(Isp_shag && !Isp_bezubitok && NormalizeDouble(OrderOpenPrice()-Ask,Digits)>=NormalizeDouble(shag,Digits) && 
               NormalizeDouble(OrderStopLoss()-Ask,Digits)>NormalizeDouble(dist,Digits))
               OrderModifyX3(OrderTicket(),0,Ask+dist,OrderTakeProfit(),0,clrCrimson);
            if(!Isp_shag && Isp_bezubitok && NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(OrderOpenPrice(),Digits) && 
               NormalizeDouble(OrderStopLoss()-Ask,Digits)>NormalizeDouble(dist,Digits))
               OrderModifyX3(OrderTicket(),0,Ask+dist,OrderTakeProfit(),0,clrCrimson);
            if(Isp_shag && Isp_bezubitok && NormalizeDouble(OrderOpenPrice()-Ask,Digits)>=NormalizeDouble(shag,Digits) && 
               NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(OrderOpenPrice(),Digits) && NormalizeDouble(OrderStopLoss()-Ask,Digits)>NormalizeDouble(dist,Digits))
               OrderModifyX3(OrderTicket(),0,Ask+dist,OrderTakeProfit(),0,clrCrimson);
           }
        }
     }

  }
//-----------------------------------------------
 
Привет всем! Скачал МТ4 ,тестер стратегий работает только с декабря 2015го,кто знает как прокачать терминал?  
[Удален]  
olleg.1:
Привет всем! Скачал МТ4 ,тестер стратегий работает только с декабря 2015го,кто знает как прокачать терминал?  
Загрузить котировки по нужному инструменту. Сервис - Архив котировок.
 
Спасибо!
 

Всем привет!

 

Подскажите, пожалуйста, как проще и правильнее реализовать в советнике возможность проверки попадания/непопадания input переменной в диапазон. Например:

а) Больше 10, но меньше 20

б) Больше 20 или меньше 10

в) и т.д. 

 

ЗЫ: пока получается 3 значения для проверки каждой переменной: case для switch (больше/меньше/больше, но меньше/меньше или больше) и 2 значения. Наверно, можно эту конструкцию зациклить и перебрать все переменные... Верное направление?

 
Антон:

Всем привет!

 

Подскажите, пожалуйста, как проще и правильнее реализовать в советнике возможность проверки попадания/непопадания input переменной в диапазон. Например:

а) Больше 10, но меньше 20

б) Больше 20 или меньше 10

в) и т.д. 

 

ЗЫ: пока получается 3 значения для проверки каждой переменной: case для switch (больше/меньше/больше, но меньше/меньше или больше) и 2 значения. Наверно, можно эту конструкцию зациклить и перебрать все переменные... Верное направление?

Какие переменные перебрать? Вы код приведите или напишите более ясно
 

Подготовимся: 

enum ENUM_case
  {
   M=1,// Больше A
   L=2,// Меньше A
   ML=3,//Больше А и меньше Б
   LM=4 //Меньше А или больше Б
  };

struct param
  {
   int               cas; //Case
   double            a; // A
   double            b; //B  
  };
param params[];
double data[3]; //Массив для записи текущих параметров

Зададим переменные 

sinput string atata0; //Параметры пробитие 
sinput string atata1; //Объем
input ENUM_case bc1=1; //Логика
input double ba1=1;//A
input double bb1=1;//B
sinput string atata2; //Сделки
input ENUM_case bc2=1;//Логика
input double ba2=1;//A
input double bb2=1;//B
sinput string atata3; //Заявки
input ENUM_case bc3=1;//Логика
input double ba3=1;//A
input double bb3=1;//B

 В OnInit идиотизм вот такого вида:

   ArrayResize(params,3);
   params[0].cas=bc1;
   params[0].a=ba1;
   params[0].b=bb1;
   params[1].cas=bc2;
...

 Не понимаю, почему нельзя записывать input переменные сразу в массив или инициализировать массив переменными :(

Где-то внутри советника заполняем массив data и запускаем функцию проверки:

bool Conditions()
{
int num=ArraySize(params);
for (int i=0;i<num;i++)
{
switch(params[i].cas) 
{
case 1 : if (!(data[i]>=params[i].a)){return(false);break;}
case 2 : if (!(data[i]<=params[i].a)){return(false);break;}
case 3 : if (!(data[i]>=params[i].a && data[i]<=params[i].b)){return(false);break;}
case 4 : if (!(data[i]<=params[i].a || data[i]>=params[i].b)){return(false);break;}
}
}
return(true);
}

 Пока как-то так. Существуют варианты получше?

 

Добрый день! 

У меня не получается купить понравившуюся програмку из маркета (МТ4).

Вроде бы делал все правильно:

впервые пополнил счет аккауунта MQL5.community (через WM),

потом зарегил аккаунт в МТ4..


Но нажимая "купить" или "арендовать" (на 1 год хочу)

-мне не снимают с пополненного счета,

а предлагают вновь снять с WM, подставляя форму заполнения WM

(и, соответственно, предлагая указать и пароль от Вебмани)..


Мне показалось это несколько странным..

-И зачем тогда я пополнял счет аккауунта MQL5.community?..


Подскажите, кто в курсе, -может чего-то здесь я не догоняю?..


заранее благодарю


============

спасибо, недождался ответа и разобрался сам. _все нормально