Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 386

 

Хм... На счет изменения координат, я как-то не подумал. Спасибо за подсказку

Тогда такой вопрос. Есть условие точки входа. Я реализовал его через статические переменные, что бы с каждым тиком они не обнулялись. Так вот, в некоторых местах графика робот прорисовывает точку входа, где вообще нет горизонтальных уровней и, соответственно, их пересечения с MA. Прогоните пожалуйста код у себя в тестере и вы увидете проблему. На EURUSD. Может по другому нужно реализовывать задачу? Я не профи в программировании

То есть, появился паттерн, нарисовались уровни, и робот ждет три пересечения одного из уровней.

Какие есть мысли по этому поводу

 
voron_026:

Хм... На счет изменения координат, я как-то не подумал. Спасибо за подсказку

Тогда такой вопрос. Есть условие точки входа. Я реализовал его через статические переменные, что бы с каждым тиком они не обнулялись. Так вот, в некоторых местах графика робот прорисовывает точку входа, где вообще нет горизонтальных уровней и, соответственно, их пересечения с MA. Прогоните пожалуйста код у себя в тестере и вы увидете проблему. На EURUSD. Может по другому нужно реализовывать задачу? Я не профи в программировании

То есть, появился паттерн, нарисовались уровни, и робот ждет три пересечения одного из уровней.

Какие есть мысли по этому поводу

А кому оно надо, не сочтите за грубость? Ищите откуда робот получает какие значения и вы найдёте другое решение проблемы.

 

Помогите две выдает ошибку! Выделил ошибки красным, хелп ПЛЗ!



//+------------------------------------------------------------------+

//|                                       Trailing Stop by Asyll.mq4 |

//|                        Copyright 2017, MetaQuotes Software Corp. |

//|                                             https://www.mql5.com |

//+------------------------------------------------------------------+

#property copyright "Alibek Asyll"

#property link      "https://www.mql4you.com"


extern int  TralType = 0; // 0-Sar, 1-ATR, 2-HMA

extern double SAR_Step = 0.02;

extern double SAR_Max = 0.2;

extern int ATR_Period = 14;

extern double ATR_K = 2.0;

extern int MMA_Period = 16;

extern int MMA_Method = 3;

extern int MMA_Shift = 0;

datetime LBT;

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int init()

  {

//---

   

//---

   return(0);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

int deinit()

  {

//---

   return(0);

  }

//+------------------------------------------------------------------+

//| Expert tick function                                             |

//+------------------------------------------------------------------+

int   start()


   {

   bool error = false;

   if (LBT!=Time[0]  {

       if (OrdersTotal()>0) {

           for (int i=o; i<OrdersTotal(); i++) {

                if (OrderSelect(i,SELECT_BY_POS)&&OrderSymbol()==Symbol()&&OrderType()<2) {

                  double SL = OrderStopLoss();

                  if (OrderType()==0) {

                     switch (TralType) {

                           case 0: SL = iSAR(NULL,0,SAR_Step, SAR_Max,0);

                                 break;

                           case 1: SL = High[1] - iATR(NULL,0,ATR_Period,1)*ATR_K;

                                 break;

                           case 2: SL = iCustom(NULL,0,"VininI_HMA_sound&amp",HMA_Period, HMA_Method, 3, HMA_Shift,false,false,"",1,0,0);

                                    break;

                     }

                     if (SL<OrderStopLoss())

                           SL = OrderStopLoss();

                 

                  }   

                  if (OrderType()==1){

                            switch (TralType){

                           case 0: SL = iSAR(NUll,0,SAR_Step, SAR_Max,0);

                                 break;

                           case 1: SL = Low[1] + iATR(NULL,0,ATR_Period,1)*ATR_K;

                                 break;

                           case 2: SL = iCustom(NULL,0,"VininI_HMA_sound&amp",HMA_Period, HMA_Method, 2, HMA_Shift,false,false,"",1,0,0);

                                 break;

                     

                     }

                     if (SL>OrderStopLoss())

                           SL = OrderStopLoss();

                  

                  

                  

                  

                  } 

                  if (SL!=OrderStopLoss()) {

                     if (!OrderModify(OrderTicket(),OrderOpenPrice(),OrderTakeProfit(),0))

                        error = true;

                  }

                   

                }

          

                  if (!error)

                     LBT = Time[0];

   }


   return(); 

   

  }

//+-------------------------------------------------------------------+

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
Выберите подходящую торговую стратегию и оформите подписку на нее в пару кликов. Все Сигналы сопровождаются подробной статистикой и графиками. Станьте Поставщиком торговых сигналов и продавайте подписку тысячам трейдеров по всему миру. Наш сервис позволит вам хорошо зарабатывать на прибыльной стратегии даже при небольшом стартовом капитале...
 
Asyll:  Помогите две выдает ошибку! Выделил ошибки красным, хелп ПЛЗ!

Для вставки кода есть смысл использовать кнопку SRC. Сообщите текст ошибок. Для ускорения работы эксперта удалите текст:

//+------------------------------------------------------------------+

//| Expert initialization function                                   |

//+------------------------------------------------------------------+

int init()

  {

//---

   

//---

   return(0);

  }

//+------------------------------------------------------------------+

//| Expert deinitialization function                                 |

//+------------------------------------------------------------------+

int deinit()

  {

//---

   return(0);

  }

На вызов этих функций уходит время - а они пустые. И без них с текстом программы будет легче работать. Посчитайте фигурные скобки. Для облегчения этого попробуйте Стилизатор в меню Сервис. Выбросьте пустые строчки.

Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
Стилизатор - Работа с исходным кодом - Разработка программ - Справка по MetaEditor
  • www.metatrader5.com
Данная функция предназначена для оформления исходного кода в соответствии с рекомендуемым стандартом. Это позволяет сделать код более читаемым, выглядящем профессионально. Грамотно оформленный код гораздо проще анализировать в последующем как его автору, так и другим пользователям. Для того чтобы запустить стилизатор, необходимо выполнить...
 

Всем доброго времени суток.

У меня есть простая  идея, которую я пытаюсь закодировать и протестировать на тестере МТ-4

Открывать ордера  при одновременном наличии следующих условий

1. На открытии минутной свечи

2 По нужной мне цене

3.В нужный мне день

4.Значение цены должно строго совпадать со значением дня.

Например 27 числа была минутная свеча с ценой открытия 1.2414

Мне нужно открыть ордер 1) на открытии свечи  2) по цене 1.2414  3 )НО НА БЛИЖАЙШИЙ ДЕНЬ, КОТОРЫЙ СЛЕДУЕТ ПОСЛЕ 27 числа

Например 28 числа была минутная свеча с ценой открытия 1.2438

Мне нужно открыть ордер 1) на открытии свечи 2) по цене 1.2438  3) НО НА БЛИЖАЙШИЙ ДЕНЬ, КОТОРЫЙ СЛЕДУЕТ ПОСЛЕ 28 числа

Например 12 числа была минутная свеча с ценой открытия 1.2451

Мне нужно открыть ордер 1) на открытии свечи 2) по цене 1.2451  3) НО НА БЛИЖАЙШИЙ ДЕНЬ, КОТОРЫЙ СЛЕДУЕТ ПОСЛЕ 12 числа


Для реализации этой идеи я начал изучать тему массивов и создал два одномерных массива.Но задуманное не получается

Буду Вам очень признателен если исправите мой код для того что бы он реализовывал вышеизложенную идею

Я тугодум, и поэтому буду очень признателен, если напишете правильной код, а не объясните на словах.

Так я пойму гораздо быстрее

Вот мой код.

double mass[3]=
{
1.2414,
1.2438,
1.2451
};
int mass1[3]=
{
27,
28,
12
};
double value = NormalizeDouble( Bid,4) ;
double S = ArrayBsearch(mass,  value,  WHOLE_ARRAY,  0, MODE_ASCEND);
int value1 = Day() ;
int S1 = ArrayBsearch(mass1,  value1, WHOLE_ARRAY,  0, MODE_ASCEND);

if(Bid  == iOpen(NULL,PERIOD_M1,0))
if(Day()!= S1)
if(NormalizeDouble ( Bid,4)== S)
{
OrderSend(Symbol(),OP_SELL,0.1,Bid ,3,Ask+400*Point,Ask-200*Point,"jfh",123 );
}
 

Здравствуйте! Написанный код предназначен для перемещения сигнальных уровней в момент выхода цены за верхний либо нижний уровень, но этого не происходит. Подскажите пожалуйста в чем ошибка.

/-------------------------выход цены за пределы сигнальных уровней-----------------------------------------------------------------------------------------------
if(Bid>=priceA){                                                                                   //если цена вышла за верхнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                                                                                             //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 }                                                                                                 
if(Bid<=priceB){                                                                                   //если цена вышла за нижнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                                                                                             //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 } 
 //----------------------------------------------------------------------------------------------------------------------------------------------------------------
 price=iHigh(Symbol(),PERIOD_M15,0);                                                               //Сигнальный уровень О(Сердцевина)
ObjectCreate("UrO",OBJ_HLINE,0,0,price);
ObjectSet("UrO",OBJPROP_COLOR,clrYellowGreen);                               
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
 priceA=price+30*Point;                                                                            //Сигнальный уровень А(Максимум)
ObjectCreate("UrA",OBJ_HLINE,0,0,priceA);
ObjectSet("UrA",OBJPROP_COLOR,clrDarkSlateBlue); 
//---------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 priceB=price-30*Point;                                                                            //Сигнальный уровень B(Минимум)
ObjectCreate("UrB",OBJ_HLINE,0,0,priceB); 
ObjectSet("UrB",OBJPROP_COLOR,clrOrangeRed); 
 
ANDREY: Например 27 числа была минутная свеча с ценой открытия 1.2414

Мне нужно открыть ордер 1) на открытии свечи  2) по цене 1.2414  3 )НО НА БЛИЖАЙШИЙ ДЕНЬ, КОТОРЫЙ СЛЕДУЕТ ПОСЛЕ 27 числа

Вот мой код.

Во-первых, нормализовать уже нормализованную BID вряд ли целесообразно, если только преподаватель велит

Во-вторых, это что же получается? 27-го числа появилась цена, и Вы срочно заносите в массив данные, чтобы 28-го сработало? А если 28-го срочные дела помешают? В массив заносят данные, которые сложно вычислить. Ваши данные должны вычисляться. Советую отлаживать советник по шагам. 1) определить требуемую цену и вывести на экран с помощью функции Alert(). Убедившись в правильности - вычислить и вывести следующее ... и так до конца. Писать до конца весь код преждевременно, т.к. по море отладки его придется менять. Как вы смотрите на такую технологию от простого к сложному?

 
vikzip: Написанный код предназначен для перемещения сигнальных уровней в момент выхода цены за верхний либо нижний уровень, но этого не происходит

Давайте посмотрим, что тут написано. Во-первых, надо строки короче. На экране уместятся и компилятору быстрее

/-------------------------выход цены за пределы сигнальных уровней-------------------------------------------------
if(Bid>=priceA){                  //если цена вышла за верхнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                            //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 }
if(Bid<=priceB){                  //если цена вышла за нижнею границу, то переместить сердцевину в новое положение
 ObjectsDeleteAll();
 OR=0;                            //переменная ордера обнуляется для поиска ситуации открытия новых ордеров
 } 
 //----------------------------------------------------------------------------------------------------------------
Если BID больше, то сделать кое-что. Далее если BID меньше, то сделать то же самое. Можно сформулировать короче: Если цена больше или меньше, то ...
Вы пишете в комментариях что-то о перемещении чего-то, а сами всего лишь удаляете все объекты. Ваши 10 строк заменяются четырьмя
if((Bid>=priceA) ||(Bid<=priceB)){     //если цена вышла за одну из ГРАНИЦ, то удалить все объекты и очистить признак поиска
   ObjectsDeleteAll();
   OR=0;                               // А это для чего?????????????????
} 

НО !!!  Признак OR надо бы как-то использовать далее? Похоже, вместо обнуления этой OR на это место надо вставить создание новых объектов. А еще проще - вместо удаления объектов просто переместить их на новое место - это всего 3 строки кода. Или преподаватель требует больше?

if((Bid>=priceA) ||(Bid<=priceB)){     //если цена вышла за одну из ГРАНИЦ, сдвинуть уровни
  ObjectSet("UrO",OBJPROP_PRICE1,iHigh(Symbol(),PERIOD_M15,0));   // Так что ли???
   Objectsset( аналогично)
   Objectsset(     )
}
От простого с ложному или наоборот?
 
STARIJ:

Во-первых, нормализовать уже нормализованную BID вряд ли целесообразно, если только преподаватель велит

Во-вторых, это что же получается? 27-го числа появилась цена, и Вы срочно заносите в массив данные, чтобы 28-го сработало? А если 28-го срочные дела помешают? В массив заносят данные, которые сложно вычислить. Ваши данные должны вычисляться. Советую отлаживать советник по шагам. 1) определить требуемую цену и вывести на экран с помощью функции Alert(). Убедившись в правильности - вычислить и вывести следующее ... и так до конца. Писать до конца весь код преждевременно, т.к. по море отладки его придется менять. Как вы смотрите на такую технологию от простого к сложному?

Спасибо большое за подсказку.

Но как мне кажется, что в своих рассуждениях Вы исходите из того, что я пытаюсь написать ТОРГУЮЩИЙ  советник.

Извините, что я не сказал Вам, что это не так.

Я пытаюсь при помощи советника  только протестировать наличие некоторой  закономерности, корреляции  между вышеприведенными параметрами, то есть подтвердить или опровергнуть идею, которая может лечь в основу уже ТОРГУЮЩЕГО советника.

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

А Ваши замечания мне конечно пригодятся при написании торгующего советника.

Спасибо

 
ANDREY:

Спасибо большое за подсказку.

Но как мне кажется, что в своих рассуждениях Вы исходите из того, что я пытаюсь написать ТОРГУЮЩИЙ  советник.

Извините, что я не сказал Вам, что это не так.

Я пытаюсь при помощи советника  только протестировать наличие некоторой  закономерности, корреляции  между вышеприведенными параметрами, то есть подтвердить или опровергнуть идею, которая может лечь в основу уже ТОРГУЮЩЕГО советника.

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

А Ваши замечания мне конечно пригодятся при написании торгующего советника.

Спасибо

Простите, что встреваю. Но... А чем логика построения линий должна отличаться у торгующего и неторгующего советников?

Когда вы на работе, вы по-другому смотрите на часы на руке по сравнению с тем, как на них смотрите дома?

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