Ваши вопросы по языку MQL4

AlexeyVik

Программист mql4 mql5
Хочу чтоб писалось всё как можно удобнее и гибче,
Твоё это хотение приводит к разрастанию кода до километровой длины.
Вот например у меня функция открытия ордеров всего 7 строк, не считая фигурных скобок. Эти 7 строк открывают ордера и Buy и Sell. Если добавить ещё 4 строки то будет открывать и стоповые и лимитные ордера. Но для чего они там если в советнике не предусмотрено их использование.
Ещё 7 строк занимают проверку открытия и вызов функции обработки ошибок. Вот и получается что максимум 18 строк для открытия ордеров 6ти типов. А теперь посчитай сколько строк у тебя...
Вот и думаю, нахрен или всё-таки возможно... Хотя пока что возможностей особо не наблюдается, хрень полнейшая выходит.
Я думаю что возможно... но нахрен.
На самом деле, я б очень рад был с кем-нить лично обсудить некоторые вещи,
Что касается с кем-то поговорить, я думаю тебе лучше выбрать того кто у тебя в авторитете и обратиться в личку. Дабы не получилось предложение от того с кем тебе не приятно общаться или его познания ниже твоих. Именно поэтому я не предлагаю.
т.к. иногда одно голова хорошо, а две бывает лучше.
Не всегда 2 головы лучше. Ведь не всегда эти головы думают в одном направлении. Как бы не получилось как в басне Крылова.
 

Conn

Активный участник
Уважаемые программисты обьясните пожалуйста, как вставить данные индикатора в код советника? скачал шаблон с этого поста http://forexsystemsru.com/443392-post1.html, но не знаю как забить туда данные одного индикатора, кто нибудь покажет на примере, или обьяснить? хочу написать обычную сову на основе одного индикатора, не знаю с чего начать
 
Последнее редактирование:

ansol

Местный знаток
Там вроде все написано!
Получаем данные пользовательского индикатора:
PHP:
Expand Collapse Copy
double ExampleCustom=iCustom(Symbol(),0,"Moving Averages",20,0,MODE_SMA,1); // Пример вызова пользовательского индикатора
И по этим данным определяем Sig, который должен быть "1" для покупки и "2" для продажи.
Тут уж от индикатора зависит, при каких его показаниях вы присвоите переменной Sig единичку или двойку
 

hoz

Активный участник
Твоё это хотение приводит к разрастанию кода до километровой длины.
Вот например у меня функция открытия ордеров всего 7 строк, не считая фигурных скобок. Эти 7 строк открывают ордера и Buy и Sell. Если добавить ещё 4 строки то будет открывать и стоповые и лимитные ордера. Но для чего они там если в советнике не предусмотрено их использование.
Ещё 7 строк занимают проверку открытия и вызов функции обработки ошибок. Вот и получается что максимум 18 строк для открытия ордеров 6ти типов. А теперь посчитай сколько строк у тебя...
Да разница то какая скока там строк. Суть в том, что главное, чтоб они висели на фоне. Ведь если уже при тестах какая-то сова особо понравится, и в ней увидется максимум перспективы, всегда можно переписать её код без библиотек или с минимумов их. А для написания большинства вариаций похожих операций, проще писать с библиотеками. Оно ж логично

Что касается с кем-то поговорить, я думаю тебе лучше выбрать того кто у тебя в авторитете и обратиться в личку. Дабы не получилось предложение от того с кем тебе не приятно общаться или его познания ниже твоих. Именно поэтому я не предлагаю.
Ну а чё там думать. Главное, чтоб не нубo_o Самое главное, чтоб были определённые знания и стремление к познаниям в том числе. Т.е. нежелание стопорится на достигнутом. В личку написать то можно, но через писанину тут наверно не выйдет разговор т.к. хз как тут объяснить что происходит:facepalm: Я такого нагородил, что сам в шоке. И неподготовленый ум не въедет в код сразу, да и не сразу тоже.
А по поводу Вас, так по ходу у Вас познаний то хватает, судя по постам на форуме.

Не всегда 2 головы лучше. Ведь не всегда эти головы думают в одном направлении. Как бы не получилось как в басне Крылова.
Да. Но своя голова для того, чтоб принять или не принять чью-то мысль. Ведь если кто курит или бухает неподалёку, это не не значит, что нужно делать так же. Проще обойти стороной. Так и тут, если что не так у кого-то или не согласие, проще обсудить и прийти к общему мнению. Тем более, я не циклюсь и всегда открыт новому. Есть же ещё, вроде со времён создания то ли С++ то ли Си, типа постулата такая, Не создай себе авторитета. Там смысл такой, что кто бы что ни сказал, нужно проверять всё, и, каждый может ошибаться. Так что не нужно заморачиваться а нужно идти вперёд и находить разные варианты решений. Вот к чему я веду.
 

AlexeyVik

Программист mql4 mql5
Так и тут, если что не так у кого-то или не согласие, проще обсудить и прийти к общему мнению. Тем более, я не циклюсь и всегда открыт новому.
Твои слова говорят об обратном
Да разница то какая скока там строк. Суть в том, что главное, чтоб они висели на фоне.

Да и я так-же зациклен. Нет у меня желания заниматься библиотеками, да и универсальность кода можно написать по-разному.
Я тебе предложил посчитать строки, а ты говоришь что нет никакой разницы. Видимо так-же будет и в личном общении... А может и нет... хз.
Я где-то говорил о том, что мне не нравится как пишет Ким. Хотя он, мне кажется, программист хороший. Так-же и твой код для меня трудно читаем.
Ты наверное заметил, что я перестал отвечать на твои вопросы, так вот это связано с трудностью чтения твоего кода, но у каждого свой стиль.
Ведь если уже при тестах какая-то сова особо понравится, и в ней увидется максимум перспективы, всегда можно переписать её код без библиотек или с минимумов их. А для написания большинства вариаций похожих операций, проще писать с библиотеками. Оно ж логично
А что касается сов для теста, так там и вовсе нет необходимости писать, например, проверку открылся-ли ордер, проверку на возможность постановки СЛ/ТП, обработку ошибок.
 

hoz

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

Вообще то я не прошу ни кого писать как я, но обсудить подход можно. ХЗ, может мне всё-таки захотелось бы отказаться от некоторых подходов, которые уже стали привычными..

Я где-то говорил о том, что мне не нравится как пишет Ким. Хотя он, мне кажется, программист хороший.

Да, Ким программмист толковый. Хотя мне тоже не всё у него нравится, в том плане, что многовато лишних проверок всяких, которые вообще не нужны. А логика у него чёткая.

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

А я много строк то и не вылаживаю. Вопросы то всегда краткие:not-bad: Тут вон некоторые личности выкидывают километровые коды без bb-кода,.. так там вроде и проще, но мне на их вопросы тоже не хочется отвечать, в виду, их чрезмерной лени и пофигизма в плане оформления вопросов.
 

AlexeyVik

Программист mql4 mql5
Вообще то я не прошу ни кого писать как я,
Ну значит ты не совсем правильно меня понял
но обсудить подход можно. ХЗ, может мне всё-таки захотелось бы отказаться от некоторых подходов, которые уже стали привычными..
А вот обсудить можно в любом варианте общения. Но это общение, как мне кажется, должно быть в виде вопрос-ответ-уточнение без попытки доказать свою правоту. Не нравится не принимается и всё.
 

hoz

Активный участник
Ну значит ты не совсем правильно меня понял
А вот обсудить можно в любом варианте общения. Но это общение, как мне кажется, должно быть в виде вопрос-ответ-уточнение без попытки доказать свою правоту. Не нравится не принимается и всё.

Ну так я об этом и говорю. Тока тут хз как начать. Довольно спецефические моменты.
 

Walt6730

Новичок форума
Господа знатоки!
Имеется условие: ордер открыт, и надо открыть такой же по объему (или бОльший) в противоположном направлении. Проблема именно в объеме: лот не фиксированный. Как прописать это в сове?
 

ansol

Местный знаток
Господа знатоки!
Имеется условие: ордер открыт, и надо открыть такой же по объему (или бОльший) в противоположном направлении. Проблема именно в объеме: лот не фиксированный. Как прописать это в сове?

У открытого ордера объем равен OrderLots() - можно использовать по своему усмотрению. В чем конкретно вопрос?
 

Walt6730

Новичок форума
У открытого ордера объем равен OrderLots() - можно использовать по своему усмотрению. В чем конкретно вопрос?

Ну вот ситуация такая. Сова открывает ордера по тренду. Получается, скажем, 10 ордеров подряд в плюсах. На каждом ордере лот увеличивается на какую-то величину. Т.е., если первый ордер в серии был, скажем, 0.1 лота, то последний - 0.2. И вот когда открывается последний, происходит разворот рынка. Пока этот последний открыт - открывается ордер в противоположном направлении, но его объем должен равняться объему последнего ордера. Собственно, как прописать именно это условие: объем равен (или больше) объема последнего открытого ордера?
 

AlexeyVik

Программист mql4 mql5
Ну вот ситуация такая. Сова открывает ордера по тренду. Получается, скажем, 10 ордеров подряд в плюсах. На каждом ордере лот увеличивается на какую-то величину. Т.е., если первый ордер в серии был, скажем, 0.1 лота, то последний - 0.2. И вот когда открывается последний, происходит разворот рынка. Пока этот последний открыт - открывается ордер в противоположном направлении, но его объем должен равняться объему последнего ордера. Собственно, как прописать именно это условие: объем равен (или больше) объема последнего открытого ордера?
Тебе нужно думать не над тем как прописать, а над тем как зафиксировать лот или тикет последнего ордера.
В таких случаях я использую переменную глобального уровня и присваиваю ей тикет при открытии ордера. Возможны варианты... или 1 переменная или 2, для ордеров Buy и Sell отдельно.
А можно и всю информацию об ордере загнать в массив и при открытии нового ордера этот массив заполняется новыми данными.
 

oleg777

Местный знаток
//+------------------------------------------------------------------+
//| Martin TestNapisanie.mq4 |
//| Copyright 2013, MetaQuotes Software Corp. |
//| _http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

extern double Lots = 0.1;
extern int TakeProfit =50;
extern int Step =30;
extern double Multiplier = 2;
extern int Magic =123;
extern int Slippage =5;
extern int ticket; // для модификации ордера
double price, TP, lastlot; // цена, тейк профит

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if(Digits == 3 || Digits== 5) // для перевода с 4 х знаков на 5,
TakeProfit*=10; //умножаем тейк профит и степ на 10
Step*=10;
Slippage*=10;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{

return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if (CountTrades() == 0)
{
double ima = iMA(Symbol(), 0, 30, 0, MODE_SMA, PRICE_CLOSE, 1); // нажав ф1 мы уувидим какие парметры нужно указать для мовен еверидж
if (Ask> ima)
{
ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue); // тейк профит и стоп ставим 0 для есн счетов где допустима модификация после открытия ордера
if (ticket > 0) // если тикет больше 0 то открываем ордер ( проверка)
{
TP = NormalizeDouble(Ask + TakeProfit * Point, Digits); // определяем тейк профит
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0); // модифицируем ордер,OrderOpenPrice - рыночный ордер нt тложенный

}

}
else if(Bid < ima)

{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red); // тейк профит и стоп ставим 0 для есн счетов где допустима модификация после открытия ордера
if (ticket > 0)
// если тикет больше 0 то открываем ордер ( проверка)
{
TP = NormalizeDouble(Bid - TakeProfit * Point, Digits); // определяем тейк профит
OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);
}

}

}
else
{
int order_type = FindLastOrderType(); // определяем какой у нас ордер бай или селл и не нужна ли ему доливка
if (order_type == OP_BUY) // нужно ли усреднение для бая
{
price = FindLastPrice(OP_BUY) // находим последнюю цену на покупку
if(Ask <= price - Step * Point)
{
lastlot = FindLastLots(OP_BUY);
lastlot = NormalizeDouble(lastlot * Multiplier, 2)
ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", Magic, 0, Blue); // увеличваем следующий ордер
if(ticket>0)
ModifyOrders(OP_BUY);

}
}
else if (order_type == OP_SELL)
{
price = FindLastPrice(OP_SELL) // находим последнюю цену на ппродажу
if(Bid <= price + Step * Point)
{
lastlot = FindLastLots(OP_SELL);
lastlot = NormalizeDouble(lastlot * Multiplier, 2)
ticket = OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, 0, "", Magic, 0, Red); // увеличваем следующий ордер
if(ticket>0)
ModifyOrders(OP_SELL);

}


}
}
return(0);
}
//+------------------------------------------------------------------+
void ModifyOrders(int otype) // модифицируем тейк профит если более 1 сделки
{
double avgprice = 0,
oreder_lots = 0;
price = 0;
for(int i=OrdersTotal-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
price += OrderOpenPrice() * OrderLots();

oreder_lots = OrderLots();
}
}
}
avgprice = NormalizeDouble(price / order_lots, Digits);

if (otype == OP_BUY) TP = NormalizeDouble(avgprice + TakeProfit * Point, Digits);
if (otype == OP_SELL) TP = NormalizeDouble(avgprice - TakeProfit * Point, Digits);
for(i= OrdersTotal()-1; i>=0, i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)

OrderModify( OrderTicket(), OrderOpenPrice(), 0, TP, 0);

}
}
}
//+------------------------------------------------------------------+
double FindLastLots(int otype) //определяем на сколько нужно увеличить следующий лот
{
double oldlots;
int oldticket;
ticket = 0;
for( int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
oldticket = OrderTicket();
if(oldticket > ticket)
{
oldlots = OrderLots();
ticket = oldticket;
}

}

}

}
return(oldlots);
}

//+------------------------------------------------------------------+
double FindLastPrice(int otype) // ищем последний ордер, чтобы от него усреднится по номеру последнего тикета
{
double oldopenprice;
int oldticket;
ticket = 0;
for (int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
oldopenprice = OrderOpenPrice();
ticket = oldticket;
}

}

}

}
return(oldopenprice);
}


//+------------------------------------------------------------------+
int FindLastOrderType() // прописываем саму функцию FindLastOrderType();

{
for (int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{

if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
return(OrderType());


}
}
return(-1);
}






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

int CountTrades()
{
int count = 0; // пока ордеров у нас нет, значит =0
for ( int i=OrdersTotal()-1; i>=0; i--) //открывыем цикл (for)и начинаем перебирать ордера
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) // нажав ф1 можно посмотреть что значит селект ордерс
{
if(OrderSymbol()== Symbol() && OrderMagicNumber() == Magic) // проверяем наш ли этот ордер и по нашей ли паре и магику
count++; // если ордер наш то мы его будем увеличивать на единицу
}

}
return(count); // в конце возвращаем переменную( количество ордеров)

}
//+------------------------------------------------------------------+
Помогите найти ошибку, сам не могу раздуплится(
 
Последнее редактирование модератором:

oleg777

Местный знаток
проба пера

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

Вложения

eevviill

Заблокирован
Вот сова, посмтри пожалуйста, что -то в коде с лотами кажется. Сова обычный мартин.
PHP:
Expand Collapse Copy
//+------------------------------------------------------------------+
//|                                         Martin TestNapisanie.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern double Lots        = 0.1;
extern int TakeProfit     =50;
extern int Step           =30;
extern double Multiplier  = 2;
extern int Magic          =123;
extern int Slippage       =5;
extern int ticket;                       // для модификации ордера
double price, TP, lastlot;                        // цена, тейк профит

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
if(Digits == 3 || Digits== 5)  // для перевода с 4 х знаков на 5,
TakeProfit*=10;                //умножаем тейк профит и степ на 10
Step*=10;
Slippage*=10;
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {

   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   if (CountTrades() == 0)
   {
   double ima = iMA(Symbol(), 0, 30, 0,  MODE_SMA, PRICE_CLOSE, 1); // нажав ф1 мы уувидим какие парметры нужно указать для мовен еверидж
   if (Ask> ima)
{
  ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "", Magic, 0, Blue);      // тейк профит и стоп ставим 0 для есн счетов где допустима модификация после открытия ордера 
  if (ticket > 0)                                                                 // если тикет больше 0 то открываем ордер ( проверка)
   {
    TP = NormalizeDouble(Ask + TakeProfit * Point, Digits);                                             // определяем тейк профит
    OrderModify(ticket, OrderOpenPrice(), 0, TP, 0);                                                     // модифицируем ордер,OrderOpenPrice - рыночный ордер нt тложенный  
                       
    }

     }
     else if(Bid < ima)
     
     {
  ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "", Magic, 0, Red);      // тейк профит и стоп ставим 0 для есн счетов где допустима модификация после открытия ордера 
  if (ticket > 0)  
                                                                 // если тикет больше 0 то открываем ордер ( проверка)
   {
    TP = NormalizeDouble(Bid - TakeProfit * Point, Digits);                                             // определяем тейк профит
    OrderModify(ticket, OrderOpenPrice(), 0, TP, 0); 
    }
    
    }
    
   }
   else
   {
   int order_type = FindLastOrderType();                                // определяем какой у нас ордер бай или селл и не нужна ли ему доливка
   if (order_type == OP_BUY)                                             // нужно ли усреднение для бая
   {
   price = FindLastPrice(OP_BUY);                     // находим последнюю цену на покупку
   if(Ask <= price - Step * Point)
   {
   lastlot = FindLastLots(OP_BUY);
   lastlot = NormalizeDouble(lastlot * Multiplier, 2);
   ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, Slippage, 0, 0, "", Magic, 0, Blue); // увеличваем следующий ордер
  if(ticket>0)
  ModifyOrders(OP_BUY);
   
   }
   
   }
      else if (order_type == OP_SELL)
   {
    price = FindLastPrice(OP_SELL);                     // находим последнюю цену на ппродажу
   if(Bid <= price + Step * Point)
   {
   lastlot = FindLastLots(OP_SELL);
   lastlot = NormalizeDouble(lastlot * Multiplier, 2);
   ticket = OrderSend(Symbol(), OP_SELL, lastlot, Bid, Slippage, 0, 0, "", Magic, 0, Red); // увеличваем следующий ордер
  if(ticket>0)
  ModifyOrders(OP_SELL);
   
   }
   
   
   }
   }
   return(0);
  }
//+------------------------------------------------------------------+
void ModifyOrders(int otype)             // модифицируем тейк профит если более 1 сделки
{
double avgprice = 0,
       oreder_lots = 0;
price = 0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
  if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
    {
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
      {
        price += OrderOpenPrice() * OrderLots();
        
         oreder_lots = OrderLots();
      }
     }
   }
     avgprice = NormalizeDouble(price / oreder_lots, Digits);
     
      if (otype == OP_BUY) TP = NormalizeDouble(avgprice + TakeProfit * Point, Digits);
       if (otype == OP_SELL) TP = NormalizeDouble(avgprice - TakeProfit * Point, Digits);
        for(i= OrdersTotal()-1; i>=0; i--)
     {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
       {
          if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
     
           OrderModify( OrderTicket(), OrderOpenPrice(), 0, TP, 0);
         
       }
     }
}
//+------------------------------------------------------------------+
double FindLastLots(int otype)                //определяем на сколько нужно увеличить следующий лот
{
double oldlots;
int oldticket;
ticket = 0;
for( int i = OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
oldticket = OrderTicket();
if(oldticket > ticket)
{
oldlots = OrderLots();
ticket = oldticket;
}

}

}

}
return(oldlots);
}

//+------------------------------------------------------------------+
double FindLastPrice(int otype)                          // ищем последний ордер, чтобы от него усреднится по номеру последнего тикета
{
double oldopenprice;
int oldticket;
ticket = 0;
for (int i = OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == otype)
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
oldopenprice = OrderOpenPrice();
ticket = oldticket;
}

}

}

}
return(oldopenprice);
}


//+------------------------------------------------------------------+
 int FindLastOrderType()                                                // прописываем саму функцию FindLastOrderType();    
 
  {
  for (int i = OrdersTotal()-1; i>=0; i--)
  {
  if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
  {
  
  if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
  return(OrderType());
  
  
  }
  }
return(-1);
}






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

 int CountTrades()
 {
 int count = 0;                                               // пока ордеров у нас нет, значит =0
 for ( int i=OrdersTotal()-1; i>=0; i--)                      //открывыем цикл (for)и начинаем перебирать ордера 
 {
 if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))               // нажав ф1 можно посмотреть что значит селект ордерс
 {
 if(OrderSymbol()== Symbol() && OrderMagicNumber() == Magic)  // проверяем наш ли этот ордер и по нашей ли паре и магику
 count++;                                                     // если ордер наш то мы его будем увеличивать на единицу
    }
                                                      
 }        
 return(count);                                             // в конце возвращаем переменную( количество ордеров)
 
 }
 //+------------------------------------------------------------------+
 

Andy200577

Новичок форума
Уважаемые знатоки!
Хочу спросить такой вопрос.
Один и тот же советник работает на разных парах, можно ли как-то организовать обмен данными между совами на разных парах? В частности, если например один сов открыл ордер, то другой (если на другой паре тоже поступил сигнал) не открывает ордеров? А также вопрос, в какой последовательности на МТ4 идет обработка работы советников? Т.е. если предположим по закрытию бара поступил сигнал на обеих парах, то какой сигнал будет использован первым?
Спасибо.
 

eevviill

Заблокирован
Уважаемые знатоки!
Хочу спросить такой вопрос.
Один и тот же советник работает на разных парах, можно ли как-то организовать обмен данными между совами на разных парах? В частности, если например один сов открыл ордер, то другой (если на другой паре тоже поступил сигнал) не открывает ордеров? А также вопрос, в какой последовательности на МТ4 идет обработка работы советников? Т.е. если предположим по закрытию бара поступил сигнал на обеих парах, то какой сигнал будет использован первым?
Спасибо.
Лучше всё в одном советнике написать.
Первым обработается та пара(сов) на которую первым пришел тик.
 

Andy200577

Новичок форума
Лучше всё в одном советнике написать.
Первым обработается та пара(сов) на которую первым пришел тик.

Я так тоже хотел сначала сделать, но дело всё в том, что советник читает данные с одного индюка, который обращается к определённому сайту. И к сожалению, чтение данных другой пары с пары, на которой установлен советник происходит с постоянной ошибкой "unknown subwindow number -1 for ObjectCreate function". Но зато пару на которой он установлен, читает нормально. Получается, что выход только один, ставить сова на разные пары, с которых будут собираться данные и уже на основе этих данных принимается решение об открытии ордеров. Вот поэтому и задал этот вопрос.
 

Who has viewed this thread (Total: 7) Посмотреть

Верх