Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 871

 
//-------Пример(мой) приказа на открытие позиции с привязкой закрытия ----------------------------------------------------- 
                                                      
                                                      //Локальная переменная, открывающая ордер БАЙ
   int OrdBuy_1() = (OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-1500*Point,Bid+1500*Point));
   
        //-------Тогда закрытие именно для этого приказа может быть таким:-----------------------------------------------------
    
    if (OrdBuy_1()==true)                              //Если был открыт ордер №1, то...
     {                                                 //...выполнить следующее:...
                                                       //...при условии, что Желтая выше красной, с сужением(условие1)...
                                                       //...и есть верхний перелом Средней (условие2)...
                                                       //...ИЛИ при условии, что Желтая выше красной, с расширением(условие1а)...
                                                       //...и есть верхний перелом Боллинджера (условие2а)... 
     if ((Yellow_0>Red_0) && (Yellow_0-Red_0)<(Yellow_1-Red_1) && (MA_2 < MA_1 && MA_1 > MA_0) || (Yellow_0>Red_0) && (Yellow_0-Red_0)>(Yellow_1-Red_1) && (MB_2 < MB_1 && MB_1 > MB_0))
        {                              
       bool Ans=OrderClose(OrdBuy_1,Lots,Bid,0);       //...закрыть ордер №1 по цене Bid (лок.переменная)и выдать сообщение                                                      
         Alert("Попытка закрыть ордер БАЙ лотом("Lots"), с ценой открытия("Ask"). Ожидание ответа..");
        }
      }
   if (Ans==true)                                     // Если получилось,... 
        {                                             //... выдать сообщение
         Alert ("Закрыт ордер БАЙ лотом("Lots"),с ценой открытия("Ask"), цена закрытия("Bid"));
        }
 
Это слега доработанный пример к посту выше
 
rapid_minus:

r772ra и artmedia70, спасибо за разъяснение.

Я понял так, что магик нужен главным образом тогда, когда трейдер использует несколько советников, при нескольких открытых ордерах, на нескольких валютных парах, счетах и т.д.(так?)

Мне же до этого далеко, и если, как я считаю, мой советник будет работать в плюс, то мне будет этого достаточно. Я его пока разрабатываю для одной пары, одного счета у одного ДЦ, причем открытым должен быть только один ордер, и магик (или к-либо другой идентификатор открытой позиции) нужен только для того, чтобы закрывался он только при наступлении конкретных именно для этого ордера условий, а другие условия, которые действительны для закрытия других ордеров (которые могут быть открыты только после закрытия данного ордера) для этого ордера были не действительны.

Например, ордер БАЙ может быть открыт при появлении условий (а+б+в+г) либо (а+д+е) либо (ж+з+и+к), и в зависимости от того, на каких условиях открыт БАЙ, закрываться он должен по своим условиям:  (а+б+в+г) по (е+ж+л), (а+д+е) по (з+л+м+н), (ж+з+и+к) по (п+р+с+т).

Мне кажется, что и цикл перебора ордеров здесь не нужен. Должно же быть какое-то простое решение, не занимающее много объема. Свое видение я изложил выше, но анализа пока не дождался, а там помимо логических, наверняка есть и синтаксические ошибки (то скобок не хватает, то переменная неправильно задана и т.п.).

Не сочтите за труд, помогите. Без этого застрял. Спасибо 

 

 

 

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

Наступило условие закрытия Buy?
Если да, то ищем тикет последней открытой позиции Buy
Если нет, то в начало
Если нашли тикет - делаем с ордером что нужно в данной ситуации
Иначе - в начало

 
rapid_minus:
Это слега доработанный пример к посту выше

Что за функция OrdBuy_1() ? У вас это не переменная, а функция. Такая конструкция совершенно неверна. Функция определяется за пределами любой другой функции, а не внутри.

 
artmedia70:

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

Наступило условие закрытия Buy?
Если да, то ищем тикет последней открытой позиции Buy
Если нет, то в начало
Если нашли тикет - делаем с ордером что нужно в данной ситуации
Иначе - в начало

Спасибо, попробую переделать. И все-таки, хоть и постараюсь переделать по Вашему разъяснению, озвучьте мои ошибки в примере выше, чтобы я их не повторял.

Спасибо 

 
rapid_minus:

Спасибо, попробую переделать. И все-таки, хоть и постараюсь переделать по Вашему разъяснению, озвучьте мои ошибки в примере выше, чтобы я их не повторял.

Спасибо 

Мне ехать нужно - некогда. Вкратце - если переменная int, то почему проверяете её как bool ? Значения стоплосс и тейкпрофит нужно нормализовать. Дальше не смотрел.
 

Провозился с линией тренда и научился ее получать. Так вот незадача оказывается при оптимизации в тестере графические объекты не работают.

Как быть? Стоит ли получать ее в индикаторе

Buffer[i]= ObjectGetValueByTime(chart_ID,name,Time[1],sub_window);

 будет так работать оптимизация?

 
artmedia70:
Мне ехать нужно - некогда. Вкратце - если переменная int, то почему проверяете её как bool ? Значения стоплосс и тейкпрофит нужно нормализовать. Дальше не смотрел.

Ну, я совсем запутался:  OrdBuy_1( ) - функция, открывающая БАЙ на условиях №1, которые указаны выше этой функции. Только наверное правильнее тип double , а не int, ведь она возвращает цену открытия ордера. И как я понимаю, я ее не вставлял ни в какую функцию, она стоит отдельно, после int start(), извлечения значений всех необходимых индикаторов, и анализа сложившейся ситуации на рынке.(ошибаюсь?). 

А как нормализовать стоп и тейк, а лучше - как их вообще не задавать? 

И не понял насчет проверки. Наверное я неправильно понял учебник - " bool OrderClose (int ticket, double lots, double price, int slippage, color Color=CLR_NONEФункция закрытия рыночного ордера." А что такое проверка?

В общем, чем дальше, тем тупее :(. 

 
Forexman77:

Провозился с линией тренда и научился ее получать. Так вот незадача оказывается при оптимизации в тестере графические объекты не работают.

Как быть? Стоит ли получать ее в индикаторе

 будет так работать оптимизация?

Высчитывайте виртуальную линию вместо реальной.
 
Forexman77:

Провозился с линией тренда и научился ее получать. Так вот незадача оказывается при оптимизации в тестере графические объекты не работают.

Как быть? Стоит ли получать ее в индикаторе

 будет так работать оптимизация?

Нет, не будет. Графика выводится только в режиме визуализации.
Причина обращения: