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

 

Привет.

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

 
CodeMuncher:
Привет. Я с нетерпением жду возможности научиться вашим трюкам и показать вам свои.

На этом форуме вы найдете много замечательных вещей.

Читайте и используйте функцию поиска без каких-либо ограничений!!!

Не стесняйтесь спрашивать о чем угодно ... Здесь много замечательных авторов/помощников.

FerruFx

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

extern string Remark1 = "== Main Settings ==";

extern int MagicNumber = 0;

extern bool SignalMail = False;

extern bool EachTickMode = true;

extern double Lots = 4;

extern int Slippage = 2;

extern bool UseStopLoss = false;

extern int StopLoss = 100;

extern bool UseTakeProfit = false;

extern int TakeProfit = 15;

extern bool UseTrailingStop = true;

extern int TrailingStop = 45;

extern bool MoveStopOnce = False;

extern int MoveStopWhenPrice = 50;

extern int MoveStopTo = 1;

extern int MaxConcurrentTrades = 2;

//Version 2.01

int BarCount;

int Current;

bool TickCheck = False;

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

//| expert initialization function |

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

int init() {

BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);

}

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

//| expert deinitialization function |

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

int deinit() {

return(0);

}

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

//| expert start function |

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

int start()

{

int Order = SIGNAL_NONE;

int Total, Ticket;

double StopLossLevel, TakeProfitLevel;

if (EachTickMode && Bars != BarCount) TickCheck = False;

Total = OrdersTotal();

Order = SIGNAL_NONE;

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

//| Variable Begin |

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

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

//| Variable End |

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

//Check position

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) {

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

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

//| Signal Begin(Exit Buy) |

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

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

//| Signal End(Exit Buy) |

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//MoveOnce

if(MoveStopOnce && MoveStopWhenPrice > 0) {

if(Bid - OrderOpenPrice() >= Point * MoveStopWhenPrice) {

if(OrderStopLoss() < OrderOpenPrice() + Point * MoveStopTo) {

OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() + Point * MoveStopTo, OrderTakeProfit(), 0, Red);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderStopLoss() > Point * TrailingStop) {

if(OrderStopLoss() < Bid - Point * TrailingStop) {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

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

//| Signal Begin(Exit Sell) |

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

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

//| Signal End(Exit Sell) |

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

if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//MoveOnce

if(MoveStopOnce && MoveStopWhenPrice > 0) {

if(OrderOpenPrice() - Ask >= Point * MoveStopWhenPrice) {

if(OrderStopLoss() > OrderOpenPrice() - Point * MoveStopTo) {

OrderModify(OrderTicket(),OrderOpenPrice(), OrderOpenPrice() - Point * MoveStopTo, OrderTakeProfit(), 0, Red);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(((OrderStopLoss - Ask) > (Point * TrailingStop)) || OrderStopLoss() == 0) {

if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

}

}

}

Изменено красным цветом

 

Я сделал изменения, указанные красным цветом, но теперь советник, похоже, не хочет работать. Я выложу весь советник, чтобы вы посмотрели. Спасибо!

Файлы:
williams_ea.mq4  12 kb
 

Убедитесь, что вы поставили () после orderstoploss

 

Круто, получилось!

Как насчет этого индикатора....

Можно ли его модифицировать, чтобы цены отображались разными цветами в зависимости от того, как они открываются? Например, если цена открывается выше предыдущего бара, то она будет зеленой, если ниже, то красной, а если ровно, то желтой? Эти цвета можно выбирать? Кроме того, можно ли расширить советник, чтобы он показывал 10 открытий, а не только 6?

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

Файлы:
period_open.mq4  23 kb
 

OrderComment()

OrderTicket()

OrderLots()

ОрдерСтопЛосс()

OrderTakeProfit()

OrderOpenTime()

Это все потенциальные инструменты фильтрации ордеров.

Что еще в этих конкретных сделках делает их уникальными?

 
Ronald Raygun:
OrderComment()

OrderTicket()

OrderLots()

ОрдерСтопЛосс()

OrderTakeProfit()

OrderOpenTime()

Это все потенциальные инструменты фильтрации ордеров.

Что еще в этих конкретных профессиях делает их уникальными?

Два наиболее важных для фильтрации ордеров - это OrderSymbol() и OrderMagicNumber(). Еще один важный инструмент - OrderComment().

Лучше всего ввести один из них в Метаредакторе, затем щелкнуть на слове asnd и нажать F1. Это приведет к появлению справки и списка всех функций заказа.

Счастливого программирования,

Hiachiever

 

Использование OrderComment

Будьте осторожны при использовании функции OrderComment() для идентификации сделок. Иногда брокер добавляет символы в комментарий.

Лучше всего использовать

if (StringFind(OrderComment(), UserComment, 0) > 0)

{

// ордер, идентифицированный по UserComment, найден в OrderComment

}

вместо

if (OrderComment() == UserComment)

{

// ордер может быть идентифицирован UserComment

// если OrderComment не был изменен брокером

}

Роберт

 

Закрытие сделок в Биквене

..............