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

 

Больше советников

Одновременно можно загрузить только 5 советников.

Файлы:
kehedge.mq4  12 kb
 

Как написать "Если последняя сделка была выигрышной"

В советнике как написать "Если последняя сделка была выигрышной" (для данной пары) то ....

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

Jo

 

о MarketInfo()

привет всем!

//

double A = MarketInfo("EURUSD",MODE_BID);

double B = MarketInfo("USDJPY",MODE_BID);

double C = MarketInfo("EURJPY",MODE_BID);

init()

{

A = MarketInfo("EURUSD",MODE_BID);

B = MarketInfo("USDJPY",MODE_BID);

C = MarketInfo("EURJPY",MODE_BID);

}

int start()

{

...

}

//

Почему эти коды не работают? Когда они выполняются, возникает очень много ошибок:

'MarketInfo' - ожидается инициализация

'A' - переменная не определена ...

..... и т.д.

 

Это сработало для меня

Jovager:
В советнике как написать "Если последняя сделка была выигрышной" (для этой пары), то ...

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

Jo

double LotsOptimised()

{

double lots = InitialLots;//лоты по умолчанию 0.1 - ошибки не будет, если лоты не будут установлены другой частью кода

// int total = OrdersHistoryTotal();

for(int i=0;i<OrdersHistoryTotal();i++) // сканируем все закрытые / отмененные сделки

{

OrderSelect(i, SELECT_BY_POS, MODE_HISTORY );

if(OrderSymbol() == Symbol()&& OrderMagicNumber()==MagicNumber)

{

if(OrderProfit()<0)

{

lots = NormalizeDouble(OrderLots() * LotsFactor,2);

}

else

{

lots=InitialLots;

}

}

}

return(lots);

}

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

 
Sendra:
Привет всем

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

'\end_of_program' - ending bracket '}' expected C:\...\My_First_EA.mq4(96,1)

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

Это второй советник, который я пробовал, с тем же сообщением об ошибке, основанный на том же индикаторе.

Спасибо.

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

Дэйв

<<<

ddiebold7@aol.com

 

Ральф, ПОМОГИТЕ с логикой ежедневных закрытий

Здравствуйте, Ральф.

Возможно, если вы не возражаете, вы могли бы немного подсказать. Для меня это было немного сложной задачей!!! Я хочу определить некоторые условия для советника, чтобы определить, закрывать или нет открытую сделку. В качестве примера возьмем ордер на покупку (я знаю, что с ордером на продажу будет противоположная логика). Итак, у меня есть ордер на покупку, открытый в понедельник. Я хочу, чтобы советник посмотрел на дневное закрытие за следующие X дней. Если дневное закрытие в каждый из следующих X дней (допустим, 5 дней для примера) будет ниже цены открытия ордера, то я хочу, чтобы советник выполнил OrderClose для закрытия сделки. Я также подумал, что еще одна возможная часть этого условия, на которую советник должен обратить внимание, - это если дневное закрытие за каждый из следующих X дней было ниже, чем закрытие предыдущего дня. Кроме того, мой советник работает на часовом таймфрейме.

Надеюсь, я объяснил, чего я хочу достичь, достаточно ясно, чтобы вы поняли.

Заранее спасибо за помощь.

 

Помогите с кодированием, пожалуйста

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

Я хотел бы закодировать следующее: если у меня есть открытый длинный ордер, я хочу иметь возможность вызвать самую высокую котировку, которую ордер видел с момента открытия этого конкретного длинного ордера. Очевидно, что при первом открытии ордера будет возвращена цена открытия. Если ордер увеличивается на 20 пунктов, возвращается цена OrderOpenPrice() + 20 пунктов. Если цена затем уменьшается на 10 пунктов, то возвращается цена OrderOpenPrice() + 20 пунктов. Я знаю, что это можно сделать в пределах определенного бара, используя OrderOpenPrice() + High[0], но когда формируется новый бар, High[0] становится High[1]. Я также буду использовать ту же логику в обратном порядке, чтобы вернуть самое низкое значение, которое видел конкретный короткий ордер. Когда ордер закроется, возвращаемые значения обнулятся.

Мне трудно разобраться в этом, может ли кто-нибудь помочь?

Спасибо!

 

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

if(variable < newquote)

переменная = newquote;

Надеюсь, это поможет!

 
jimven:
Сохраните самое высокое значение котировки текущего бара в переменную. Каждый раз, когда вы получаете другую котировку, сравнивайте ее со значением переменной. Если новое значение выше, сохраните его в переменной. Если новое значение ниже, сохраните переменную.

if(variable < newquote)

переменная = новая кавычка;

Надеюсь, это поможет!

Спасибо за помощь, но у меня есть один вопрос. Что происходит, когда текущий бар больше не является баром, на котором открылся ордер? Что если ордер открылся на баре 5 баров назад? Теперь я хочу получить самую высокую котировку за 5 баров, самую высокую котировку с момента открытия ордера. Будет ли это по-прежнему работать?

Спасибо