Экспертописателям !!!!

 

Обращаюсь с просьбой!


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

Хочу доработать(усложнить)  простого эксперта, но у меня получается работать только с одной сделкой.

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

Эксперт и Пользовательский индикатор во вложении.

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

ЗЫ.

Попутно еще один вопрос. Есть ли где нить индикатор взвешенной МА у которой весовые коэффициенты считаются с привязкой к объемам бара?

Файлы:
 
BigeR >>:

Есть ли где нить индикатор взвешенной МА у которой весовые коэффициенты считаются с привязкой к объемам бара?

В МТ объемы это не количество сделок (открытых ордеров), а количество тиков (сколько было "приходов" новых цен). Так что никакого объема в понимании трейдера в МТ нету :(((

 
ForexTools >>:

В МТ объемы это не количество сделок (открытых ордеров), а количество тиков (сколько было "приходов" новых цен). Так что никакого объема в понимании трейдера в МТ нету :(((

Это понятно, что объемы на форексе это квази объемы, но тем не менее хочется увидеть что из себя будет представлять такая МА.

 
BigeR >>:

Хочу доработать(усложнить)  простого эксперта, но у меня получается работать только с одной сделкой.

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


В самом простейшем случае.

Как вариант, можно предусмотреть при открытии первой позиции - свой магик:

extern int    MagicNumber1   = 15345;//вставить во внешние параметры
extern int    MagicNumber2   = 54321;//вставить во внешние параметры
extern int    TakeProfit2    = 250;    // Размер фиксированного тэйка 2 позиции

 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,LLow2,0,"2-PriceChannel",MagicNumber1,0,Green);



После чего, после открытия первой позиции открывать вторую с заданным тейком. Но с другим магиком.
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,LLow2,TakeProfit2,"2-PriceChannel",MagicNumber2,0,Green);

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

//+----------------------------+
//| Stop Trailing              |
//+----------------------------+
void TrailPositions() // функция трейлинг стоп
{
  int Orders = OrdersTotal();
  for (int i=0; i<Orders; i++) {
    if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
    if (OrderSymbol() != Symbol()) continue;
     if (OrderMagicNumber() == MagicNumber2 ){    
     if (OrderType() == OP_BUY )  {
      if (Bid-OrderOpenPrice() > MinProfit*Point) {
        if (OrderStopLoss() < Bid-(TrailingStop+TrailingStep-1)*Point) {
          OrderModify(OrderTicket(), OrderOpenPrice(), Bid-TrailingStop*Point,
                                                     OrderTakeProfit(), 0, Blue);
        }      }    }
    if (OrderType() == OP_SELL)  {
      if (OrderOpenPrice()-Ask >MinProfit*Point) {
        if (OrderStopLoss() > Ask+(TrailingStop+TrailingStep-1)*Point 
                                                       || OrderStopLoss() == 0) {
          OrderModify(OrderTicket(), OrderOpenPrice(), Ask+TrailingStop*Point,
                                                      OrderTakeProfit(), 0, Blue);
        }   }   }    }   }  }


Во внешние параметры советника добавить также :

extern string ___Хи-Хи___ = " ---- Трейлинг стопа ---- "; 
extern bool   StopTrailing  = true;
extern int    MinProfit     = 160; //порог включения трейлин стопа
extern int    TrailingStop  = 130; // величина трейлинг стопа
extern int    TrailingStep  = 10 // шаг трейлинг стопа


А для запуска трала в самом начале функции СТАРТ  предусмотреть строку:

 if(StopTrailing) TrailPositions(); // выключатель трейлинг стопа
 

Забыл добавить.

Что для реализации вышеописанного алгоритма работы нужно задействовать функцию определения наличия открытых позиций по их магику. Например ф-ю И.Кима.

Вместо вот этого :

 total=OrdersTotal();
   if(total<1) // Открытых позиций нет, значит можно открывать новые сделки
     {

Нужно с помщью ф-и И.Кима определять, есть ли открытые позиции с магиком1 или магиком 2

//----------------------

https://www.mql5.com/ru/forum/107476/page4#68002

Функция ExistPositions().

 
BigeR >>:

Обращаюсь с просьбой!


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

Хочу доработать(усложнить) простого эксперта, но у меня получается работать только с одной сделкой.

Даже для опытных программеров нет никакого смысла усложнять код советника, а гораздо проще проинсталлировать столько терминалов, сколько нужно иметь открытых позиций и на каждый установить по одному советнику. Это не только проще в плане программирования, но и в плане сопровождения, т.к. несколько сделок одновременно из одного советника сопровождать будет невозможно из-за занятости торгового потока - будут сыпаться ошибки. А поскольку у каждой копии терминала свой отдельный торговый поток, то убиваем сразу двух зайцев одновременно.

 
Reshetov >>:

Даже для опытных программеров нет никакого смысла усложнять код советника, а гораздо проще проинсталлировать столько терминалов, сколько нужно иметь открытых позиций и на каждый установить по одному советнику. Это не только проще в плане программирования, но и в плане сопровождения, т.к. несколько сделок одновременно из одного советника сопровождать будет невозможно из-за занятости торгового потока - будут сыпаться ошибки. А поскольку у каждой копии терминала свой отдельный торговый поток, то убиваем сразу двух зайцев одновременно.

Я так понял два отдельных терминала будут висеть на одном и том же счете???