Коллеги! Где я допустил ошибку или как правильно реализовать? - страница 2

 
ToLik_SRGV:

Посмотрел код, немного не понял суть стратегии, например, зачем открывать сразу 2 ордера на покупку, практически по одной цене? Так должно быть или это ошибка?


Да. Именно так и задумано. В коде нет стратегии, она только у меня в голове. Я делаю полуавтомат. Когда считаю нужным, разрешаю советнику торговать. И он уже начинает тактически по условиям выставлять ордера. Там же нет условий по закрытию открытых ордеров. Потому как не решил вопрос с правильный автоматическим открытием. Я же пытаюсь понять, в чем может быть проблема и как правильнее будет указать кодом логику по, тем условиям, что я указал? Это моя главная задача сейчас, понять как. Потому как перепробовал кучу вариаций, но с переменным успехом, то работает то нет.

// Если ордеров нет (OrdersTotal()==0), зачем проверять есть среди них ордера с заданным меджиком или нет?

OrdersTotal()==0, нужен для того чтобы, советник открыл первый ордер, при условии что нету ни одного открытого в рынке. А без этой функции, он молчит как в танке, если в рынке полная тишина.

// Про Magicq4 в условии нет ничего, там про меджик Magicq3.

Пардон! :) За опечатку. Исправил:

// Если в открытых присутствуют позиции с магическими номерами Magic или Magicq1,
но при этом чтобы не было в открытых с номером Magicq4.
if(getOrders(Magic) || getOrders(Magicq1) && !getOrders(Magicq4)) BUYq1 = true;

А сам Magicq4, инициализирован во внешних переменных.

Вот закодить все по условиям и чтобы как надо открывало и возникла проблема. Из за которой я и обратился к опытным кодерам, кто может приподать урок мне, как лучше реализовать эту логику в условиях MQL4? :-)

 
Просто в прикрепленном файле этот кусок выглядит так:
// Если в открытых присутствуют позиции с магическими номерами Magic или Magicq1,
 но при этом чтобы не было в открытых с номером Magicq4.   

if(getOrders(Magic) || getOrders(Magicq1) && !getOrders(Magicq3)) BUYq1 = true;

// Если ордеров нет (OrdersTotal()==0), зачем проверять есть среди них ордера с заданным меджиком или нет?

// Если в открытых нету позиций с магическими номерами Magicq1 и Magicq2.
if(OrdersTotal()==0 && !getOrders(Magicq1) && !getOrders(Magicq2)) BUY = true;

Если в терминале нет открытых ордеров то OrdersTotal() вернет 0, а это значит что физически не может быть ордеров с меджиками Magicq1 и Magicq2, так как открытых вообще нет.

Если в терминале появляется какие либо ордера, то  OrdersTotal() вернет их количество, а это значит что это условие (с использованием &) всегда будет FALSE и нечего проверено не будет, я вот про что.
По поводу кода, чем смогу, тем помогу :)

 
ToLik_SRGV:
Просто в прикрепленном файле этот кусок выглядит так:

// Если ордеров нет (OrdersTotal()==0), зачем проверять есть среди них ордера с заданным меджиком или нет?

Если в терминале нет открытых ордеров то OrdersTotal() вернет 0, а это значит что физически не может быть ордеров с меджиками Magicq1 и Magicq2, так как открытых вообще нет.

Если в терминале появляется какие либо ордера, то OrdersTotal() вернет их количество, а это значит что это условие (с использованием &) всегда будет FALSE и нечего проверено не будет, я вот про что.
По поводу кода, чем смогу, тем помогу :)


Привет! Просто если в рынке есть открытые ордера с данными магиками. То открытие ордеров с подобным магиком запрещено. Но бывает, что в рынке ноль ордеров. И чтобы советник вошел в рынок пришлось ввести дополнительное условие. А когда в рынке нету ордеров, счетчик пытается найти ордер для проверки, а его нету. Соответственно условие не проверяется и советник молчит. Только вот в условии я дополнил такое условие:

if(OrdersTotal()==0  ||  OrdersTotal()>0 && !getOrders(Magicq1) && !getOrders(Magicq2)) BUY = true; 

То есть. Если нет ни одного ордера, то открываем по условиям. Если ордер хоть один есть, проверяем на наличие подобного магика, если нету, то выполняем условие по открытию. :)

Причина обращения: