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

 

это неправильно : if(totalOrders==0 && Magic==OrderMagicNumber() &&

OrderSelect(i-1 , SELECT_BY_POS,MODE_HISTORY)==true)

потому что вы вызываете OrderMagicNumber() перед OrderSelect(), так что он, вероятно, ссылается на предыдущий вызов.

 
EBK:
Ой, извините, я неправильно выразил свое мнение.

Я хочу написать (но не могу сделать) что-то, что остановит торговлю советника (или часть торговли советника), если эквити меньше определенного значения.

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

Попробуйте этот советник

CloseAllBuySell - База кодов MQL4

Используйте его идею и сделайте код примерно следующего содержания

if (AccountEquity()<YourValue) closeallorders();

 

Не мог бы кто-нибудь добавить трейлинг-стоп EMA в пример советника по скользящим средним.

EMA трейлинг установлен на 1

Затем измените вход на

Buy=Open[1]>ma && Close[1]>ma;

Sell=Open[1]<ma && Close[1]<ma;

Это должно сделать очень хороший простой скальпер.

Спасибо

Бено

Файлы:
 
 

Добавьте в начало программы

extern int pips=2;//(или ваше количество пунктов)

затем замените

if ((OrderType() == OP_BUY) && (OrderStopLoss() < OrderOpenPrice()))

sl = OrderOpenPrice() ;

if ((OrderType() == OP_SELL) && (OrderStopLoss() > OrderOpenPrice()))

sl = OrderOpenPrice() ;[/CODE]

to

[CODE]if ((OrderType() == OP_BUY) && (OrderStopLoss() < OrderOpenPrice()))

sl = OrderOpenPrice() +pips*Point;

if ((OrderType() == OP_SELL) && (OrderStopLoss() > OrderOpenPrice()))

sl = OrderOpenPrice() -pips*Point;
 

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

Спасибо!

Файлы:
hilow3.mq4  2 kb
 

Нет, исправьте это

extern int pips=2;

//+------------------------------------------------------------------+

//| функция запуска скриптовой программы |

//+------------------------------------------------------------------+

int start()

{

//----

string curr = Symbol();

int ot = OrdersTotal();

int ords[200], ordType[200], ordTicket[200]; double ordLots[200];

string ordComments[200];

int ix=0;

for (int i=0; i<ot; i++)

{

int o = OrderSelect(i, SELECT_BY_POS);

if (OrderSymbol() == Symbol())

if ((OrderType() == OP_BUY) || (OrderType() == OP_SELL))

{

double sl = 0;

if ((OrderType() == OP_BUY) && (OrderStopLoss() < OrderOpenPrice())))

sl = OrderOpenPrice() +pips*Point;

if ((OrderType() == OP_SELL) && (OrderStopLoss() > OrderOpenPrice())))

sl = OrderOpenPrice() -pips*Point;

if (sl != 0+10)

OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0);

}

}

//----

return(0);

 

Хорошо, теперь код выглядит следующим образом:

extern int pips=10;//

//+------------------------------------------------------------------+

//| функция запуска скриптовой программы |

//+------------------------------------------------------------------+

int start()

{

//----

string curr = Symbol();

int ot = OrdersTotal();

int ords[200], ordType[200], ordTicket[200]; double ordLots[200];

string ordComments[200];

int ix=0;

for (int i=0; i<ot; i++)

{

int o = OrderSelect(i, SELECT_BY_POS);

if (OrderSymbol() == Symbol())

if ((OrderType() == OP_BUY) || (OrderType() == OP_SELL))

{

double sl = 0;

if ((OrderType() == OP_BUY) && (OrderStopLoss() < OrderOpenPrice())))

sl = OrderOpenPrice() +pips*Point;

if ((OrderType() == OP_SELL) && (OrderStopLoss() > OrderOpenPrice())))

sl = OrderOpenPrice() -pips*Point;

if (sl != 0)

OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0);

}

}

//----

return(0);

}

//+------------------------------------------------------------------+

 

Привет Roger09,

Большое спасибо за вашу помощь с этим кодом. Теперь код моего скрипта выглядит следующим образом (я добавил изменения, выделенные красным цветом, только для этого ответа, код в MQ4 выглядит так же, как и все остальное, что там было):

//+------------------------------------------------------------------+

//| функция запуска скриптовой программы |

//+------------------------------------------------------------------+

int start()

{

//----

extern int pips=2;//

string curr = Symbol();

int ot = OrdersTotal();

int ords[200], ordType[200], ordTicket[200]; double ordLots[200];

string ordComments[200];

int ix=0;

for (int i=0; i<ot; i++)

{

int o = OrderSelect(i, SELECT_BY_POS);

if (OrderSymbol() == Symbol())

if ((OrderType() == OP_BUY) || (OrderType() == OP_SELL))

{

double sl = 0;

if ((OrderType() == OP_BUY) && (OrderStopLoss() < OrderOpenPrice())))

sl = OrderOpenPrice() +pips*Point;

if ((OrderType() == OP_SELL) && (OrderStopLoss() > OrderOpenPrice())))

sl = OrderOpenPrice() -pips*Point;

if (sl != 0)

OrderModify(OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0);

}

}

//----

return(0);

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

 

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