Сканировать валютную пару на наличие открытых ордеров - страница 2

 
moskitman:
Внезапно возникла обратная задача. Т.е. нужно определить ОТСУТСТВИЕ какого бы то ни было ордера на валютной паре. Неужели прийдется организовывать цикл перебора ордеров внутри цикла перебора инструментов? Или есть более простое и менее ресурсоёмкое решение?


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

Пример, как это выглядит в коде...

доливка к уже ранее открытой позиции (пирамидинг) - через запрос значения элемента массива Mas_Tip[0].

////-----------------------------------------------ЛОНГ-----------------------------------------------------
 //  Старт - пробой фрактала ценой за пределами линии зубов Аллигатора
         
 if (Mas_Tip[0]==0 && upfractal > 0 && Bid > upfractal && Bid > Teeth) // старт                                                         
 return(10);// критерий на открытие ордера Buy при условии, что тек цена больше фрактала и линии зубов аллигатрора    
  

// Доливка по АО - блюдце, пересечение нулевой линии, два пика 
if (((Mas_Tip[0]!=0 && AO3>0 && AO3>AO2 && AO2>0 && AO2<AO1 && AO1>0) || //-блюдце
     (Mas_Tip[0]!=0 && AO2<0 && AO1>0 )  ||                              //-пересечение "0"
     //(Mas_Tip[0]!=0 && signal_buy == true) ||                          //-два пика  - см выше по тексту...
 
// Доливка по АС выше нуля - 1. блюдце + последующий бар выше предыдушего, 2. ниже нуля - пик вниз и три последующих подъема 
// 3.пик вниз и  два последующих подъема, причем последний столбик гистограммы пересекает нулевую линию снизу вверх    
    (Mas_Tip[0]!=0 && AC4>0 && AC4>AC3 && AC3>0 && AC3<AC2 && AC2>0 && AC1 > 0 && AC1 > AC2) || 
    (Mas_Tip[0]!=0 && AC5<0 && AC5>AC4 && AC4<0 && AC4<AC3 && AC3<0 && AC2 < 0 && AC2 > AC3 && AC1 < 0 && AC1 > AC2) ||
    (Mas_Tip[0]!=0 && AC4<0 && AC4>AC3 && AC3<0 && AC3<AC2 && AC2<0 && AC1 > 0)) 
    
    
      ){ Print ("Функция определения ТК - покупка: сигнал блюдце, пересечение нулевой лин от АО, АС - masstip 0  = ",Mas_Tip[0]); 
return(100);}    // Доливки по АО и АС - откываем байстоп - на максимуме 1-го бара
 
Спасибо, Роман, но мне кажется, что это чересчур сложно. К тому же торуемые символы у меня и так уже "забабаханы" плюсами, торгуемые в шорт и минусами, торгуемые в лонг.
 
moskitman:
Спасибо, Роман, но мне кажется, что это чересчур сложно. К тому же торуемые символы у меня и так уже "забабаханы" плюсами, торгуемые в шорт и минусами, торгуемые в лонг.

Сложного там ничего нет. Просто таким подходом Вы исключите, как Вы и интересуетесь в своем посте, вложенный цикл по ордерам внутри цикла по торгуемым символам.
 

Далее уже можете, как там пишут -

"Для того чтобы правильно составить функцию учёта ордеров, необходимо решить, какие параметры нужно учитывать. В большинстве случаев для принятия торговых решений требуются значения следующих параметров:
общее количество ордеров;
количество ордеров каждого типа (например, сколько имеется ордеров Buy, сколько SellStop, BuyLimit и т.д.);
все характеристики каждого из ордеров (номер ордера, StopLoss и TakeProfit ордера, количество лотов и т.д.)."

добавить сюда такую характеристику - на каком символе открыт ордер...

Я добавил в свой сОв - еще две нужные мне для оценки и принятия того или иного решения характеристики - профит по ордеру и время его открытия:

У меня

// Функция учёта ордеров
// Глобальные переменные:
// Mas_Ord_New[31][11]   // Массив ордеров последний известный
// Mas_Ord_Old[31][11]   // Массив ордеров предыдущий (старый)
                        // 1й индекс = порядковый номер ордера 
                        // [][0] не определяется
                        // [][1] курс откр. ордера (абс.знач.курса)
                        // [][2] StopLoss ордера   (абс.знач.курса)
                        // [][3] TakeProfit ордера (абс.знач.курса)
                        // [][4] номер ордера        
                        // [][5] колич. лотов орд. (абс.знач.курса)
                        // [][6] тип орд. 0=B,1=S,2=BL,3=SL,4=BS,5=SS
                        // [][7] магическое число ордера
                        // [][8] 0/1 факт наличия комментария
                        // [][9] профит по ордеру
                        // [] [10] время открытия 

В учебнике

// Функция учёта ордеров
// Глобальные переменные:
// Mas_Ord_New[31][9]   // Массив ордеров последний известный
// Mas_Ord_Old[31][9]   // Массив ордеров предыдущий (старый)
                        // 1й индекс = порядковый номер ордера 
                        // [][0] не определяется
                        // [][1] курс откр. ордера (абс.знач.курса)
                        // [][2] StopLoss ордера   (абс.знач.курса)
                        // [][3] TakeProfit ордера (абс.знач.курса)
                        // [][4] номер ордера        
                        // [][5] колич. лотов орд. (абс.знач.курса)
                        // [][6] тип орд. 0=B,1=S,2=BL,3=SL,4=BS,5=SS
                        // [][7] магическое число ордера
                        // [][8] 0/1 факт наличия комментария

У Вас будет все аналогично...только + символ открытия.

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

и далее, через оператор свич прописываете то или иное действие при совпадении символа выбора case:

switch(выражение)
  {
   case константа: операторы
   case константа: операторы
     ...
   default: операторы
  }
Этот оператор запускаете на выполнение внутри условия, что if (Mas_Tip[0]!=0) - есть ордера, то уже делаете то-то и то-то внутри того или иного case: оператора switch, т.е. в зависимости от символа, на котором открыт ордер, что Вам и надо.
 
moskitman:
Спасибо, Роман, но мне кажется, что это чересчур сложно. К тому же торуемые символы у меня и так уже "забабаханы" плюсами, торгуемые в шорт и минусами, торгуемые в лонг.

Я сам этот подход, описанный в учебнике, в настоящее время тестирую в одном из советников на демо-счете, проблем с учетом ордеров и принятий решений в зависимости от их количества и пр. логики работы сОва по торговым условиям не было вообще никаких.
 
moskitman:
Спасибо, Роман, но мне кажется, что это чересчур сложно. К тому же торуемые символы у меня и так уже "забабаханы" плюсами, торгуемые в шорт и минусами, торгуемые в лонг.


Я не об этих плюсах/минусах, но о создании дополнительной характеристики открытого/установленного ордера, а именно - по какому символу открыт/установлен ордер.

Сколько тогруется инструментов?

 
Roman.:


Я не об этих плюсах/минусах, но о создании дополнительной характеристики открытого/установленного ордера, а именно - по какому символу открыт/установлен ордер.

Сколько тогруется инструментов?


21
 
moskitman:

21


Прям как у меня :)

 
PapaYozh:


Прям как у меня :)


Вы б, ИМХО, поближе к ответу на поставленный вопрос, человек - интересуется, но не улыбками бросаться.
 
Roman.:

Вы б, ИМХО, поближе к ответу на поставленный вопрос, человек - интересуется, но не улыбками бросаться.

Вы ж там что-то уже ответили.
Причина обращения: