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

 
Vadim Podoprigora:

Здравствуйте!

Помогите пожалуйста написать советник.

Суть советника:  открывает 4 ордера по 1 лоту.

2 на продажу: usdchf; eurusd;

2 на покупку:  gbpusd; usdjpy;

 

При достижении общего профита в 5 пунктов, закрыть все сделки. И начать заново. 

4 лота в сумме?

а если профита не будет? от слова совсем. 

 
Vadim Podoprigora:

Здравствуйте!

Помогите пожалуйста написать советник.

Суть советника:  открывает 4 ордера по 1 лоту.

2 на продажу: usdchf; eurusd;

2 на покупку:  gbpusd; usdjpy;

 

При достижении общего профита в 5 пунктов, закрыть все сделки. И начать заново. 

Не нужно дублировать свой вопрос в разных темах.

Обращайтесь во Фриланс.

 
Andrey Sokolov:

Приветствую.

Подскажите как прописать условие чтоб действие выполнялось при открытии новой свечи на текущем графике?

https://www.mql5.com/ru/articles/159
Обработчик события "новый бар"
Обработчик события "новый бар"
  • 2010.10.04
  • Konstantin Gruzdev
  • www.mql5.com
Язык программирования MQL5 позволяет решать задачи на совершенно новом уровне. Даже те задачи, которые уже вроде имеют решения, благодаря объектно-ориентированному программированию могут подняться на качественно новый уровень. В данной статье специально взят простой пример проверки появления нового бара на графике, который был преобразован в достаточно мощный и универсальный инструмент. Какой? Читайте в статье.
 

Здравствуйте! Помогите разобратся с массивами!

Необходимо заполнить массив индикатором МАСД. Как я понимаю, есть данные: индекс бара, значение MODE_MAIN, значение MODE_SIGNAL, т.е массив должен быть трехмерным типа ( a [] [] []), или как??  Если можно пример.  

 

Сергей, а ты сам когда-нибудь пользовался этим кодом?

Статья в общем хорошая, но пользоваться

datetime lastbar_time=SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);

очень опасно. Чтобы это работало надо, по рекомендации барабашки, историю "подёргивать" периодически. За какое место не уточнялось.

В общем после долгих страданий я пришёл к выводу что лучше пользоваться функцией CopyRates()

Сообщения о возможных ошибках дописывает каждый сам себе по желанию.

bool newBar()
{
static datetime timeLastBar;
  MqlRates mqlRates[];
   int s = 0;
    do
     {
      s++;
     }
    while(CopyRates(_Symbol, PERIOD_CURRENT, 0, 1, mqlRates) < 0 && s < 7);
   bool ret = timeLastBar != mqlRates[0].time;
   if(ret)
    timeLastBar = mqlRates[0].time;
   return(ret);
}/*******************************************************************/
 
Alexey Viktorov:

Сергей, а ты сам когда-нибудь пользовался этим кодом?

Статья в общем хорошая, но пользоваться

datetime lastbar_time=SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);

очень опасно. Чтобы это работало надо, по рекомендации барабашки, историю "подёргивать" периодически. За какое место не уточнялось.

Алексей, подскажи, когда ты нарывался на ошибки при таком использовании? Было хоть раз?

Просто я сам пользуюсь таким методом, и ещё не нарывался на неприятности. Впрочем, может ещё предстоит?

Хотелось бы пояснений - во-избежание таксказать... :)

А где барабашка такое говорил?

 
Artyom Trishkin:

Алексей, подскажи, когда ты нарывался на ошибки при таком использовании? Было хоть раз?

Просто я сам пользуюсь таким методом, и ещё не нарывался на неприятности. Впрочем, может ещё предстоит?

Хотелось бы пояснений - во-избежание таксказать... :)

А где барабашка такое говорил?

https://www.mql5.com/ru/forum/89213

Там 8 страниц перепалки. И не только барабашка, но Slawa говорят что

Slawa:

Где Вы видите неадекватное поведение функции? Вы документацию внимательно читали?

Возвращает информацию о состоянии исторических данных. Не обновляет информацию, не инициирует подкачку данных. Просто возвращает то, что есть на данный момент

 
Artyom Trishkin:

Алексей, подскажи, когда ты нарывался на ошибки при таком использовании? Было хоть раз?

Просто я сам пользуюсь таким методом, и ещё не нарывался на неприятности. Впрочем, может ещё предстоит?

Хотелось бы пояснений - во-избежание таксказать... :)

А где барабашка такое говорил?

И вот про подёргивание

Vladimir Karputov:
В одном терминале (на периоде М15 стояли советники) на  одном символе не сработало - я на 99% процентов уверен, что проблема в том, что при использовании чужого таймфрейма нужно всё время "поддёргивать" историю. Думаю это лучше делать через CopyTime().
кота за причинное место.
 
Artyom Trishkin:

Алексей, подскажи, когда ты нарывался на ошибки при таком использовании? Было хоть раз?

Насколько я помню, может не вернуть то, что ожидается, если ТФ больше текущего.
 
Здравствуйте! У меня вопрос по МТ5.  

В терминале МТ5 есть для примера советники (MACD Sample и Moving Averages), так вот, если в коде этих советников в хенделе индикатора вставить конкретный ТФ, например PERIOD_H4, вместо "_Period", то при тесте по ценам открытия на старших ТФ,  возникает ошибка загрузки индикатора: cannot load indicator 'MACD' [4805] и как следствие: tester stopped because OnInit failed. Какие мнения? Может я делаю, что-т не так? Возможно ли закодировать советника так, чтобы он тестился по ценам открытия на любом ТФ?

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

Заранее благодарю за ответ.

int OnInit(void)
  {
//--- prepare trade class to control positions if hedging mode is active
   ExtHedging=((ENUM_ACCOUNT_MARGIN_MODE)AccountInfoInteger(ACCOUNT_MARGIN_MODE)==ACCOUNT_MARGIN_MODE_RETAIL_HEDGING);
   ExtTrade.SetExpertMagicNumber(MA_MAGIC);
   ExtTrade.SetMarginMode();
//--- Moving Average indicator
   ExtHandle=iMA(_Symbol,PERIOD_H4,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE);
   if(ExtHandle==INVALID_HANDLE)
     {
      printf("Error creating MA indicator");
      return(INIT_FAILED);
     }
//--- ok
   return(INIT_SUCCEEDED);
  }

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