Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 20

 
Vitalie Postolache:
Ещё раз.  В работе с ордером на первом месте должен быть OrderSelect. Потом уже всё остальное.
Спасибо за ответ ...  Вы хотите сказать что строчка     if(OrderSelect(i=0;i<accTotal;i++)==true)   записана неправильно, или не в том месте кода? ...
 
bablusut:
Спасибо за ответ ...  Вы хотите сказать что строчка     if(OrderSelect(i=0;i<accTotal;i++)==true)   записана неправильно, или не в том месте кода? ...
Я там добавил подробностей.
 

Renat Akhtyamov:
по ссылке пройдите, она у Вас в посте выделена.

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

if( iCustom(NULL,t,"T...c",1,b) != .......).....

 

atik441:уже смотрел. нет там нужной информации .в пустом буфере 10и значное значение  а при наличии сигнала - значение цены... и как в коде mql4 обозначается отсутствие или наличие значения в буфере ? (пользовался не раз ,да забыл ...) 

if( iCustom(NULL,t,"T...c",1,b) != EMPTY_VALUE).....
 
Vitalie Postolache:
if( iCustom(NULL,t,"T...c",1,b) != EMPTY_VALUE).....Во ! то что и нать... спасибки за напоминание  !
 

Помогите разобраться. Возможно ли последовательное исполнение ордеров при условии, когда при двух разнонаправленных

открытых сделках в первую очередь срабатывает ТР любой из сделок, а затем только SL, хотя в процессе торговли уровень SL

любой из сделок был пройден первым?

 
ganri:

Помогите разобраться. Возможно ли последовательное исполнение ордеров при условии, когда при двух разнонаправленных

открытых сделках в первую очередь срабатывает ТР любой из сделок, а затем только SL, хотя в процессе торговли уровень SL

любой из сделок был пройден первым?

анализируйте аск/бид
 
Vitalie Postolache:

Ещё раз.  В работе с ордером на первом месте должен быть OrderSelect. Потом уже всё остальное.

Если работаем в цикле перебора ордеров, то порядок действий такой:

1. Проверка if(OrderSelect())

2. Проверка, тот ли это ордер, обычно проверяют символ и магик, потом тип, если необходимо - if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2) - в данном случае обрабатываются только рыночные ордера, выставленные на текущем инструменте и с заданным магиком

3. Обработка других данных вроде OrderComment(), OrderProfit() и т.д. 

Выглядеть это будет примерно так:

for(int i=OrdersHistoryTotal()-1; i>=0; i--) //перебираем историю торгов
{
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) //если ордер выбран то работаем дальше, иначе смысла нет
      {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2) //Если ордер тот, что нам нужен (эту проверку можно и опустить, если нужно обработать все ордера в истории)
         {
            if(StringFind(OrderComment(),"[tp]",0)>-1) //если найден признак закрытия профитом
            Print("Order #",OrderTicket()," profit: ", OrderTakeProfit());
            if(StringFind(OrderComment(),"[sl]",0)>-1) //если найден признак закрытия стоплосс
            Print("Order #",OrderTicket()," loss: "OrderTakeProfit());
         }
      }
}

Спасибо за ответ ...  итак, для перебора ордеров в истории торгов используем функцию OrdersHistoryTotal, которая после отброса всего нам не нужного представляется как: 

for(int i=OrdersHistoryTotal()-1; i>=0; i--) // - здесь вопрос, что значит "accTotal" в шаблоне функции, который мы отбросили? и почему Вы взяли "i--" а не "i++", как в шаблоне?
 - вторая функция OrderComment возвращает комментарий выбранного ордера, если он выбран предыдущей функцией OrdersHistoryTotal, принимает вид: 

 if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) //- где "i", это "i>=0" из предыдущей функции, а "SELECT_BY_TICKET" заменили на "SELECT_BY_POS" и добавили "MODE_HISTORY" - почему так? 

 - третья строчка определение, проверка нужного ордера в принципе не нужна, т. к. в данной истории только рыночные ордера закрытые по ТП. и СЛ., (может присутствовать закрытый отложенный ордер, но это будет редко),  все остальные параметры ордера нам не важны. Важно другое - количество закрытых ордеров в истории будет постоянно увеличиваться, нельзя ли так сделать что бы при пересчёте брались не все закрытые ордера, а определённое количество последних, например 5 - 10? 

- последние четыре строчки в общем понятны, вопрос лишь в функции PlaySound,  код которой необходимо вставить после каждой строчки "Print("..." в таком виде: 

bool  PlaySound(

string  payment      // имя файла

);

 ... или тоже как то преобразуется? 

 
bablusut:

Почитайте про циклы, как это огранизовано и как работает, да и вообще, учебник по С++ для начинающих не мешало бы проштудировать, С++ очень похож на MQL, отличия только в торговых функциях.

Ещё почитайте учебник по MQL и справку в компиляторе, статьи тут на форуме, это на верхней кромке окна на синем фоне. Ну невозможно же на форуме весь курс пересказать и объяснить. 

Учебник по MQL4
Учебник по MQL4
  • book.mql4.com
Учебник по MQL4
 
Vitalie Postolache:

Почитайте про циклы, как это огранизовано и как работает, да и вообще, учебник по С++ для начинающих не мешало бы проштудировать, С++ очень похож на MQL, отличия только в торговых функциях.

Ещё почитайте учебник по MQL и справку в компиляторе, статьи тут на форуме, это на верхней кромке окна на синем фоне. Ну невозможно же на форуме весь курс пересказать и объяснить. 

Спасибо Vitalie Postolache за оказанную помощь, спасибо за совет, а информацию по указанным учебникам мне пожалуй поздновато штудировать на шестом десятке, я уж пожалуй не потяну столько, надо было раньше, да времени не было. Я Вам тут изрядно надоел, извиняйте если что, больше не буду - ухожу раз так.