Как запустить советника для нескольких пар?

 
Привет
Я новичок в Forex и MetaTrader и пытаюсь разобраться в некоторых основах.
Допустим, у меня есть советник, который привязан к графику EURUSD, но я хочу найти сетапы по нескольким парам от этого советника. Но советник запускается только тогда, когда приходит свежий тик для EURUSD. Правильно? Теперь я вижу в этом ограничение MT, так как мой советник может обрабатывать множество пар, но запускается только при свежем тике прикрепленной пары (EURUSD в данном случае). Это, вероятно, приводит к пропуску тиков неприкрепленных пар. Отсюда следующий вопрос.

Может ли советник работать с несколькими парами без привязки к графику? Если нет, то как решить вышеуказанную проблему? Пожалуйста, посоветуйте.

Спасибо
Pankaj
 

Это просто способ, которым работает mt4. Я думаю, что нет никакого решения для этого. Но вот что мне сейчас пришло в голову. Если вы получите тик EURUSD хотя бы за 1-2 минуты до новой свечи (допустим, это свеча H1), вы можете запустить цикл while loop для поиска новых свечей на других парах. В этом случае, если новый тик для EURUSD не приходит даже в течение 5 минут или более, цикл while уже запущен и вы получаете все новые свечи на других парах. Надеюсь, вы это поняли.

Но вопрос в том, зачем вам это нужно? Лучше запускать советника на разных графиках, так как советник, работающий на EURUSD, не сможет совершить сделку на другой паре.

 

Привет,

Я предпочитаю помнить, что мы все еще работаем в режиме реального времени, поэтому я просто забываю об использовании цикла while или функции wait, чтобы держать руку на пульсе!

Прикрепление вашего советника к такой паре, как EURUSD, дает вам достаточно сигналов для управления всеми остальными парами, тики очень частые. Это вопрос не минут, а секунд (запуск цикла на 2 минуты для меня звучит просто безумно). Если это не вопрос секунды, просто подумайте, почему или посмотрите у другого брокера.

Если вам действительно нужно больше, чем то, что вы получите, прикрепив советника к eurusd, подумайте о запуске отдельного экземпляра советника, прикрепленного к каждой валюте. Извините, но я склонен думать "или переосмыслить свою систему".

Извините, если кажется, что это сообщение немного резкое. Хотел поделиться с вами своей точкой зрения.

Удачи.

 
wrm:

Лучше запускать советника на разных графиках, так как советник, работающий на EURUSD, не сможет совершить сделку на другой паре.

Это неверно. Функция OrderSend() может быть выполнена для любого символа, который вы укажете в качестве первого параметра, независимо от графика.

И вы можете получить последние цены спроса и предложения для символов вне текущего графика с помощью функции MarketInfo().

Таким образом, у вас есть следующие возможности.

- Иметь один и тот же советник, прикрепленный ко многим графикам и работающий с родным символом каждого графика (используя встроенные переменные Ask и Bid).

- иметь советника, прикрепленного к определенному графику, который работает для всех выбранных символов (с функцией MarketInfo() для неродных символов) - просто используя тики родного символа в качестве триггера

- иметь ведущий и ведомый советники, прикрепленные к разным графикам, где один срабатывает по команде другого (например, один записывает значение в файл, другой постоянно читает файл, пока не найдет эти данные, а затем торгует).

 
cloudbreaker:

Это неверно. Функция OrderSend() может быть выполнена для любого символа, который вы укажете в качестве первого параметра, независимо от графика.

И вы можете получить последние цены спроса и предложения для символов вне текущего графика с помощью функции MarketInfo().

Таким образом, у вас есть следующие возможности.

- Прикрепить один и тот же советник ко многим графикам и работать для "родного" символа каждого графика (используя встроенные переменные Ask и Bid).

- иметь советника, прикрепленного к определенному графику, который работает для всех выбранных символов (с функцией MarketInfo() для неродных символов) - просто используя тики родного символа в качестве триггера

- иметь ведущего и ведомого советников, прикрепленных к разным графикам, где один срабатывает по команде другого (например, один записывает значение в файл, другой постоянно читает файл, пока не найдет эти данные, а затем торгует).


Очень познавательно. Спасибо всем вам. Я выберу второй вариант, так как он совпадает с тем, что я думал раньше.


wrm: Я хочу, чтобы все было как можно меньше. Если это технически возможно, то я буду использовать только один советник. Единственная причина держать отдельного советника - это на случай, если мне понадобится построить график, а мне это не нужно.


Конечно, я буду тестировать, как только советник появится. Если он не будет работать так, как я хочу, то я изменю его.

 
//+------------------------------------------------------------------+
//|                                                          jkh.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

bool wannaBuy = true;
bool wannaBuy1 = true;
extern double LotSize = 0.01;
extern string symbol1 = "EURUSD";
extern string symbol2 = "USDCHF";
extern int MaxDifference = 6;
extern int Slippage = 3;
extern int Magicnumber1 = 786;
extern int Magicnumber2 = 123;
int sendticket = 3;
string pairs[18];

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
pairs[0] = symbol1;
pairs[1] = symbol2;
wannaBuy = true;
wannaBuy1 = true;

//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   // Send order for EURUSD & USDCHF
   if ( wannaBuy) {   
   int ticket1;
   RefreshRates();
   ticket1 = OrderSend( symbol1, OP_BUY, LotSize, MarketInfo( symbol1,MODE_ASK), Slippage, 0, 0, 0,0, Magicnumber1,0) & OrderSend( symbol2, OP_BUY, LotSize, MarketInfo( symbol2,MODE_ASK), Slippage, 0, 0, 0,0, Magicnumber2,0);
   if ( ticket1 <0 )
   {
   Print ("OrderSend failed with error #", GetLastError());
   return(0);
   }
   wannaBuy = false;
   }

//----
   return(0);
  }
//+------------------------------------------------------------------+
Вот простой код для открытия EURUSD и USDCHF на одном графике. Даже если добавить ea на другой график, он будет открывать EURUSD и USDCHF.
 
tigersoft:
Вот простой код для открытия EURUSD и USDCHF на одном графике. Даже ea добавляется на другой график, так что он будет открывать EURUSD и USDCHF.

Довольно аккуратно. Спасибо tigersoft

 
cloudbreaker:

Это неверно. Функция OrderSend() может быть выполнена для любого символа, который вы укажете в качестве первого параметра, независимо от графика.

И вы можете получить последние цены спроса и предложения для символов вне текущего графика с помощью функции MarketInfo().

Таким образом, у вас есть следующие возможности.

- Иметь один и тот же советник, прикрепленный ко многим графикам и работающий с родным символом каждого графика (используя встроенные переменные Ask и Bid).

- иметь советника, прикрепленного к определенному графику, который работает для всех выбранных символов (с функцией MarketInfo() для неродных символов) - просто используя тики родного символа в качестве триггера

- иметь ведущий и ведомый советники, прикрепленные к разным графикам, где один запускается другим (например, один записывает значение в файл, другой постоянно читает файл, пока не найдет эти данные, а затем торгует).


Здравствуйте, не могли бы вы подробнее рассказать о варианте №3?


А также, как будут работать расчеты цены/индикатора с неродными символами при использовании варианта#2? Я понимаю, как посылать ордера на неродные символы, но не понимаю, как проверять условия входа на неродных символах.

 
skyhr:

Здравствуйте, не могли бы вы подробнее рассказать о варианте #3?


И еще, как будет происходить расчет цены/индикатора с неродными символами при использовании варианта №2? Я понимаю, как отправлять ордера на неродные символы, но не понимаю, как проверять условия входа на неродных символах.

Используйте функцию MarketInfo() для неродных символов. Это друг :)

 
skyhr:

Здравствуйте, не могли бы вы подробнее рассказать о варианте #3?


А также, как будет происходить расчет цены/индикатора с неродными символами при использовании варианта №2? Я понимаю, как отправлять ордера на неродные символы, но не понимаю, как проверять условия входа на неродных символах.

Вариант 3 - просто записать значение в файл от советника, отслеживающего определенный символ. Пусть другой эксперт отслеживает этот файл и выполняет определенную часть логики, когда это значение присутствует.

Вариант 2 - использовать функцию MarketInfo() для получения цен спроса и предложения для неродных символов, а не использовать переменные Ask и Bid, которые подходят только для родного символа.

 
cloudbreaker:

Вариант 3 - просто записать значение в файл от эксперта, отслеживающего определенный символ. Пусть другой эксперт отслеживает этот файл и выполняет определенную часть логики, когда это значение присутствует.

Вариант 2 - использовать функцию MarketInfo() для получения цен спроса и предложения для неродных символов, а не использовать переменные Ask и Bid, которые подходят только для родного символа.

Я думаю, что оба подхода хороши.

Единственное, что я хотел бы добавить, это то, что вариант №2 имеет преимущество в производительности из-за меньших накладных расходов. Все будет находиться в памяти, что, очевидно, быстрее, чем работа с файлами.

Одно из преимуществ варианта №3 - если вы хотите использовать данные файла для чего-то, что MT4 не может сделать.

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