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

 

Предотвращение переторговки

Привет всем,

Я протестировал свой советник, используя метод всех тиков на графике H4, используя MACD кросс для инициирования ордеров (среди прочих), и тестер стратегии открывает около 200 позиций в первые несколько минут, поэтому после некоторого чтения я понял, что мне нужно ограничить количество сделок, которые он размещает, в моей системе он не должен размещать более 1 сделки каждые 4 часа, потому что я жду закрытия свечи перед этим, используя iMACD(.... PRICE_CLOSE...) и смещаю его на 0 для MACDMainCurrent & MACDSymbolCurrent и 1 для MACDMainPrevious & MACDSymbolPrevious.

Мои глобальные переменные следующие:

string hasOrderedGV = "has_ordered_GV";

string barsGV = "bars_GV";

И я вставил этот код перед тем, как мой советник проверяет наличие длинных или коротких позиций:

//--- Определить, размещен ли уже ордер на временном блоке H4

if ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barsGV,Bars);

}

//--- Проверка возможности длинной позиции (BUY)

if (GlobalVariableGet (hasOrderedGV, false))

{

if ... (здесь я фактически проверяю MACD кросс среди других индикаторов).

Затем, если ордер открылся успешно:

if (Ticket > 0)

{

GlobalVariableSet(hasOrderedGV,true);

{

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))

OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), GetTPPriceShort(SLPriceShort, RiskRewardRatio), OrderExpiration(), Green);

и т.д. и т.п.

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

 

...

Почему бы вам просто не посчитать, сколько ордеров уже открыл ваш советник, и если он уже открыл ордер, не открывать новый ордер?

Просто идея (и обычный и самый простой способ ограничения количества ордеров, открываемых советником).

crsnape@btinternet.com:
Всем привет,

Я протестировал свой советник по методу all ticks на графике H4, используя MACD cross для инициирования ордеров (среди прочего), и тестер стратегии открывает около 200 позиций в первые несколько минут, поэтому после некоторого чтения я понял, что мне нужно ограничить количество сделок, которые он размещает, в моей системе он не должен размещать более 1 сделки каждые 4 часа, потому что я жду закрытия свечи перед этим, используя iMACD(.... PRICE_CLOSE...) и смещаю его на 0 для MACDMainCurrent & MACDSymbolCurrent и 1 для MACDMainPrevious & MACDSymbolPrevious.

Мои глобальные переменные следующие:

string hasOrderedGV = "has_ordered_GV";

string barsGV = "bars_GV";

И я вставил этот код перед тем, как мой советник проверяет наличие длинных или коротких позиций:

//--- Определить, размещен ли уже ордер на временном блоке H4

if ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barsGV,Bars);

}

//--- Проверка возможности длинной позиции (BUY)

if (GlobalVariableGet (hasOrderedGV, false))

{

if ... (здесь я фактически проверяю MACD кросс среди других индикаторов).

Затем, если ордер открылся успешно:

if (Ticket > 0)

{

GlobalVariableSet(hasOrderedGV,true);

{

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES))

OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), GetTPPriceShort(SLPriceShort, RiskRewardRatio), OrderExpiration(), Green);

и т.д. и т.п.

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

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

if (CountedOrders > 5)

Break;

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

 

Я прикрепляю этот советник к моему 5-значному счету mt4... Но он не открывает ни одной сделки.

пожалуйста, помогите мне

Файлы:
dipu_2.mq4  5 kb
 

Пожалуйста, мне нужно отредактировать советника, чтобы он перемещал стоплосс в 3 шага.

У этого советника уже есть возможность безубытка, но я хочу, чтобы советник перемещал мой

стоплосс от первой точки безубыточности на +20 пунктов, когда моя прибыль достигает

+27 пунктов и снова переместить его на +40 пунктов, когда прибыль достигнет +50 пунктов и даже больше, если это возможно.

больше, если возможно.

Файлы:
 

Привет, Младен,

Спасибо за предупреждение! Мне уже удалось решить эту проблему.

Кстати, не знаете ли Вы, что означает функция MODE и SHIFT в iStochasticdo или есть ли место, где можно получить больше информации? Я читал документацию на сайте mql4, но она не имеет смысла для меня. Объяснение, которое они дают, слишком краткое.

Например.

iStochastic(NULL, 0, 3, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 0);

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_MAIN, 0);

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Current + 1);

Что делает текущий + 0 и т.д.?

Спасибо и пожелания

Терранс

mladen:
Терранс Это функция. Поместите ее в конец вашего эксперта и разместите вызовы к ней там, где вы считаете нужным проверить, открыт ли уже ордер на текущем баре.
 

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

if ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barsGV,Bars);

}

//--- Проверка возможности длинной позиции (BUY)

if (GlobalVariableGet (hasOrderedGV, false)) Thanks

 

...

Терранс

MODE_MAIN означает, что вы считываете значение стохастической линии. MODE_SIGNAL означает, что вы считываете значение сигнальной линии стохастика.

Что касается SHIFT: он одинаков для всех индкаторов (даже пользовательских). Например: SHIFT=0 означает текущее значение баров, SHIFT=1 означает значение первого закрытого бара и так далее...

tkuan77:
Привет Младен,

Спасибо за предупреждение! Мне уже удалось решить эту проблему.

Кстати, не знаете ли вы, что означает функция MODE и SHIFT в iStochasticdo, или есть ли место, где можно найти больше информации? Я читал документацию на сайте mql4, но она не имеет смысла для меня. Объяснения, которые они дают, слишком кратки.

Например.

iStochastic(NULL, 0, 3, 3, 3, 3, MODE_SMMA, 0, MODE_SIGNAL, Current + 0);

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_MAIN, 0);

iStochastic(NULL, 0, 5, 3, 3, MODE_SMMA, 0, MODE_SIGNAL,Current + 1);

Что делает текущий + 0 и т.д.?

Спасибо и пожелания

Терранс
 

...

Ошибка заключается в том, что GlobalVariableGet() имеет только один параметр (имя переменной). Вам не нужен второй параметр ("false", который вы имеете в вызове функции)

crsnape@btinternet.com:
Здравствуйте, не мог бы кто-нибудь подсказать мне, где я ошибаюсь? Я получаю код ошибки ')' неправильное количество параметров в строке, выделенной красным - но все параметры складываются...

if ((GlobalVariableGet (barsGV) == 0) || (GlobalVariableGet (barsGV) < Bars))

{

GlobalVariableSet(hasOrderedGV,false);

GlobalVariableSet(barsGV,Bars);

}

//--- Проверка возможности длинной позиции (BUY)

если (GlobalVariableGet (hasOrderedGV, false)) Спасибо
 

Я изменил код на такой, и он, по крайней мере, не содержит ошибок - это нормально?

if (GlobalVariableGet (hasOrderedGV) == false)

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