Как кодировать? - страница 311

 

Привет, Младен, как всегда, ты крут!

mladen:
Terrance Используй Close[0] в этом случае. Почти каждый советник использует Close для этой цели, поэтому я думаю, что это сработает и для вас.
 

...

Если ваш советник исполняется только при начале бара, это может быть вызвано несколькими причинами:

- Он ограничен работой только на новом баре. Этот подход имеет некоторые проблемы, если необходимо управлять трейлинг-стопами и другими подобными вещами, но если он работает с фиксированным стоп-лоссом и тейк-профитом, то это все равно.

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

Premeus:
Я заметил, что мой советник не работает между движениями цены на таймфрейме M1. Я знаю, что советник будет выполняться при каждом тике.

Но я видел, что он исполняется каждый раз, когда начинается новый бар.

Я неправильно понимаю?

Есть ли способ заставить советника активировать каждый тик?

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

Кто-нибудь может помочь мне решить эту проблему.

Я новичок в кодировании советников.

Заранее спасибо.
 

Спасибо, Младен.

Я попробую воспользоваться вашим предложением.

 

Приветствую богов кодинга,

Мне нужна помощь в поиске функции советника, которая контролирует выполнение отправки ордеров таким образом, что ордер не может быть открыт, если уже существует ордер по той же цене.

Простая логика: если цена открытия ордера и тип ордера = цене открытия существующего ордера и типу ордера, то выход и поиск следующего критерия входа.

Также мне нужна функция, которая предотвратит исполнение ордера, если он находится на расстоянии x пунктов от уже существующей цены.

Простая логика: если цена открытия ордера и тип ордера < цены открытия последнего ордера и типа + x пунктов, то выход и поиск следующего критерия входа.

Спасибо,

Pip

 

...

Попробуйте эти 2 функции
: Первая - выяснить, есть ли уже ордер с точно такой же ценой открытия

Второй - проверить, есть ли ордер, который находится на расстоянии nnn пунктов от желаемой цены

.

Оба возвращают true, если цена равна или если расстояние от цены некоторых текущих открытых ордеров находится в пределах указанного расстояния.

bool existsAtSamePrice(int magicNumber, double price)

{

for (int i=OrdersTotal()-1; i>=0 ; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol()!=Symbol()) continue;

if (OrderMagicNumber()!=magicNumber) continue;

if (CompareDouble(OrderOpenPrice(),price)) return(true);

}

return(false);

}

//

//

//

//

//

bool existsAtApproximatePrice(int magicNumber, double price, double distance)

{

for (int i=OrdersTotal()-1; i>=0 ; i--)

{

if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;

if (OrderSymbol()!=Symbol()) continue;

if (OrderMagicNumber()!=magicNumber) continue;

if (MathAbs(OrderOpenPrice()-price)< distance) return(true);

}

return(false);

}

//

//

//

//

//

bool CompareDouble(double val1, double val2)

{

return(NormalizeDouble(val1,Digits)==NormalizeDouble(val2,Digits));

}

Pip:
Приветствую богов кодинга,

Мне нужна помощь в поиске функции эксперта, которая контролирует выполнение отправки ордеров таким образом, что ордер не может быть открыт, если уже существует ордер по той же цене.

Простая логика: если цена открытия ордера и тип ордера = цене открытия существующего ордера и типу ордера, то выход и поиск следующего критерия входа.

Также мне нужна функция, которая предотвратит исполнение ордера, если он находится на расстоянии x пунктов от уже существующей цены.

Простая логика: если цена открытия ордера и тип ордера < цены открытия последнего ордера и типа + x пунктов, то выход и поиск следующего критерия входа.

Спасибо,

Pip
 
mladen:
Это может быть по нескольким причинам, но наиболее распространенные:
- стоп лосс и/или тейк профит слишком близки к текущей цене

- ваш брокер является ECN/STP типом брокера, в этом случае вы должны сначала выставить ордер со стоп лоссом и тейк профитом установленными на 0 и только после открытия ордера вы можете изменить стоп лосс и/или тейк профит до желаемых значений (соблюдая предыдущий пункт конечно)

Привет!

Спасибо за помощь!

Итак, если я правильно понял, если я вставлю TakeProfit и StopLoss в OrderSend как внешние "правила", этот советник будет работать правильно только на не-ECN брокерах?

извините за мой английский

 

...

Да

У ECN/STP брокеров вы должны открыть ордер со стоп лоссом и/или тейк профитом, установленным на 0, и когда ордер уже открыт, только тогда вы можете изменить стоп лосс и/или тейк профит.

pearl1:
Привет!

Спасибо за помощь!

Значит, если я правильно понял, если я вставлю TakeProfit и StopLoss в OrderSend как внешние "правила", этот советник будет работать только на не-ECN брокерах?

извините за мой английский
 
mladen:
Да. У ECN/STP брокеров вы должны открыть ордер со стоп лоссом и/или тейк профитом, установленным на 0, и когда ордер уже открыт, только тогда вы можете изменить стоп лосс и/или тейк профит.

Спасибо еще раз, так... как я могу это исправить? извините.

 

...

Как я уже сказал, вы должны сделать это в 2 шага:

1. шаг - открыть ордер (с помощью OrderSend()) со стоп-лоссом и тейк-профитом, установленными на 0

2. шаг - модифицировать этот ордер (используя OrderModify()), установив стоп-лосс и тейк-профит в желаемые значения.

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

pearl1:
Спасибо еще раз, так... как я могу это исправить? извините
 

Новичок в кодировании

Привет всем,

Я новичок в кодинге и медленно изучаю язык и синтаксис, но у меня возник вопрос о том, как MT4 обновляет переменные.

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

Я проверяю, чтобы убедиться, что выбранная сделка все еще открыта

t_CloseTime=OrderCloseTime(); //возвращает 0, если ордер не закрыт

if(t_CloseTime==0) //Ордер закрыт, если не ноль.

{

if(OrderProfit() > LastProfitHigh) LastProfitHigh=OrderProfit();

if(LastProfitHigh >= MinProfit && MinProfitReached==false) MinProfitReached=true;

}//endif

Итак, если логика верна, почему эта переменная "LastProfitHigh" поднимается и опускается?

Спасибо за помощь.

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