Ключевая ошибка в строке:
else if (Bid >= OrderOpenPrice () - nolossLevel * Point)
но, по правде говоря, Ваш эксперт надо заносить в учебники по программированию на MQL4 в главу: "Как нельзя писать экспертов". Для своей задачи возьмите лучше готовый эксперт Игоря Кима, у него он очень толково написан, и разберите по косточкам.
else if (Bid >= OrderOpenPrice () - nolossLevel * Point)
но, по правде говоря, Ваш эксперт надо заносить в учебники по программированию на MQL4 в главу: "Как нельзя писать экспертов". Для своей задачи возьмите лучше готовый эксперт Игоря Кима, у него он очень толково написан, и разберите по косточкам.
Так может быть просто напишите мне готовый эксперт,как надо и правильно.У меня очень большая беда с точными науками и все это програмирование я вообще не понимаю,ну не дано мне .... :-(.Я с этим-то колупался месяц наверное .Ну не мое это,не мое.
Зачем писать, если все уже давно написано. Еще раз говорю зайди к Игорю Киму на сайт http://www.kimiv.ru/dev_mq4.htm, скачай советник Трейлинг Стоп и разбери его. Там есть все функции, которые тебе нужны.
2 nalex2000
А то обращайтесь - напишем и запустим в космос.
info [at] e2e-fx [dot] net
ICQ 169791434
PS. Приветствую, Roger!
А то обращайтесь - напишем и запустим в космос.
info [at] e2e-fx [dot] net
ICQ 169791434
PS. Приветствую, Roger!
Ответил с примером:
http://forum.alpari-idc.ru/showpost.php?p=722619&postcount=176
http://forum.alpari-idc.ru/showpost.php?p=722619&postcount=176
// --- Параметры бу ---
extern bool CheckBreakeven = true;
extern int Level1 = 20;
// --- Параметры трейлинг-стопа ---
extern bool UseTrailing = true;
extern int MinProfit = 30;
extern int TrailingStop = 30;
extern int TrailingStep = 5;
void start()
{
if (CheckBreakeven) CheckLevel1();
if (UseTrailing) TrailingPositions();
//...
}
void CheckLevel1()
{
int cnt = OrdersTotal();
for (int i=0; i<cnt; i++) {
if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != Magic) continue;
int type = OrderType();
if (type == OP_BUY) {
if (Bid-OrderOpenPrice() > Level1*Point) {
if (OrderStopLoss() < OrderOpenPrice()) {
OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
}
}
}
if (type == OP_SELL) {
if (OrderOpenPrice()-Ask > Level1*Point) {
if (OrderStopLoss() > OrderOpenPrice() || OrderStopLoss() == 0) {
OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice(), OrderTakeProfit(), 0);
}
}
}
}
}
void TrailingPositions()
{
int cnt = OrdersTotal();
for (int i=0; i<cnt; i++) {
if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue;
if (OrderSymbol() != Symbol()) continue;
if (OrderMagicNumber() != Magic) continue;
if (OrderType() == OP_BUY) {
if (Bid-OrderOpenPrice() > MinProfit*Point) {
if (OrderStopLoss() < Bid-(TrailingStop+TrailingStep-1)*Point) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid-TrailingStop*Point, OrderTakeProfit(), 0, Blue);
}
}
}
if (OrderType() == OP_SELL) {
if (OrderOpenPrice()-Ask > MinProfit*Point) {
if (OrderStopLoss() > Ask+(TrailingStop+TrailingStep-1)*Point || OrderStopLoss() == 0) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask+TrailingStop*Point, OrderTakeProfit(), 0, Blue);
}
}
}
}
}
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Условия советника просты до безобразия - он должен переносить в бу через 20пл,через 30 пл должен ставить трелинг 30 .Вот и все.Я накропал но.....что-то он не так работает.В бу ставит через 5 пунктов.гляньте спецы что неправильно:
//---- input parameters
extern int ticket = 0;
extern int nolossLevel = 24; // когда ставить безубыток
extern int trailLevel = 34; // когда начинать трейл
extern int trailValue = 30; // размер трейла
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if ( OrderSelect (ticket, SELECT_BY_TICKET) // Успешно выбран
&& 0 == OrderCloseTime() // и еще не закрыт
&& OrderSymbol () == Symbol () // и нужный символ
) {
double newStop = OrderStopLoss ();
switch (OrderType ()) {
case OP_BUY:
// Открыт - BUY
if (Ask >= OrderOpenPrice () + trailLevel * Point) {
// прошли trailLevel пунктов - трейл
newStop = Ask - trailValue * Point;
} else if (Ask >= OrderOpenPrice () + nolossLevel * Point) {
// прошли nolossLevel пунктов - безубыток
newStop = OrderOpenPrice ();
}
if (newStop > OrderStopLoss ()) {
OrderModify(ticket,OrderOpenPrice(),newStop,OrderTakeProfit(),OrderExpiration());
}
break;
case OP_SELL:
// Открыт - SELL
if (Bid <= OrderOpenPrice () - trailLevel * Point) {
// прошли trailLevel пунктов - трейл
newStop = Bid - trailValue * Point;
} else if (Bid >= OrderOpenPrice () - nolossLevel * Point) {
// прошли nolossLevel пунктов - безубыток
newStop = OrderOpenPrice ();
}
if (newStop < OrderStopLoss ()) {
OrderModify(ticket,OrderOpenPrice(),newStop,OrderTakeProfit(),OrderExpiration());
}
break;
}
}
return(0);
}
//+------------------------------------------------------------------+