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

 

Добрый день.

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

Я хотел бы начать писать ea, используя MACD гистограмму и когда линия тригера пересекается выше и ниже гистограммы.

Есть ли у кого-нибудь простая программа, чтобы начать понимать код и запустить ее, чтобы посмотреть, как она торгует?

Спасибо-вам

даниэль

 

Импорт трендлайна из Excel/CSV=?

Привет, я написал несколько простых скриптов в последние дни, особенно ObjectCreate (OBJ_TREND с Ray=1) это действительно хорошо, как это работает, но как я могу рисовать объекты из готового csv-файла, где у меня есть некоторые исторические данные Close-Data для моих Close-Lines, потому что я хочу иметь возможность удалить мой шаблон и импортировать данные каждый раз, когда они мне нужны с помощью скрипта,

есть ли у кого-нибудь идеи, как это может работать?

CSV имеет дату (без времени) и значение Close-Value (мне не нужно больше данных для линий)

и скрипт должен нарисовать линию от этой даты с Ray=1 и настраиваемым цветом.

возможно, скрипт мог бы также проверить открытый график (символ) и взять правильный csv-файл, если их несколько ;-)

Пожалуйста, кто-нибудь может мне помочь

 

Ошибка для OrderDelete(OrderTicket())

Привет всем!

Я новичок в программировании на MQL4, но с другой стороны я знаю C++.

Но у меня есть некоторые проблемы с торговыми функциями.

Вот моя проблема:

Я создаю отложенный ордер с :

ticket = OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-5*Point,slippage,0,0,"",0,0,Green);

и в другой точке программы я хочу удалить его:

if (OrderSelect(ticket,SELECT_BY_TICKET)) OrderDelete(OrderTicket());

ОШИБКА 4108! Почему? Номер билета правильный, я его печатаю.

Но если я использую :

if (OrderSelect(position, SELECT_BY_POS))OrderDelete(OrderTicket());

все нормально!

Почему?

Спасибо за поддержку и за форум.

 

Код для завершения работы советника ???

Привет всем,

Я ищу код, который завершает работу советника. Я разместил небольшой мартингейл, который я написал. Он закрывает все отложенные и открытые ордера, когда достигает определенного процента от просадки счета. Я также смог заставить его прекратить торговлю, когда достигнута цель ежедневной прибыли. Он начинает торговать снова на следующий день. (Спасибо тому, кто написал SWB Grid, поскольку я использовал их код).

Однако я хотел бы, чтобы советник завершал работу при достижении определенного условия. Скажем, он достигает Max Percentage Drawdown и закрывает все отложенные ордера и открытые позиции. В этот момент я хочу, чтобы советник завершил свою работу, чтобы он не начал торговать снова, пока я не уберу советник с графика и не поставлю его снова.

Вот советник. Любые предложения или помощь будут очень признательны!

Спасибо,

Джо

Файлы:
 

Нужна помощь по теме "'\end_of_program' - несбалансированная левая скобка"

Здравствуйте, я работаю над советником и постоянно получаю сообщение об ошибке при компиляции: "'\end_of_program' - несбалансированная левая скобка". Обычно это сообщение об ошибке связано с неравным количеством левых и правых скобок. Однако я проверил свои коды вдоль и поперек и обнаружил, что у меня одинаковое количество левых и правых скобок. Так что это сводит меня с ума, что я не могу понять, где это пошло не так. Может ли кто-нибудь проверить мои коды и сказать мне, как это исправить? Спасибо миллион. Мои коды опубликованы ниже:

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

//| Breakout.mq4 |

//| Pooh |

//| |

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

#property copyright "Pooh"

#property link ""

//--- входные параметры

extern int LengthI=23;//для входа в рынок

extern int LengthO=7;//для выхода из рынка

extern double Lots=0.1; //для размера ордера

extern int N1=14; //период для ATR

extern int NLots=1; //количество увеличенных лотов ордера

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

//| функция инициализации эксперта |

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

int init()

{

//----

//----

return(0);

}

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

//| функция деинициализации эксперта | |

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

int deinit()

{

//----

//----

return(0);

}

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

//| функция запуска эксперта |

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

int start()

{

//----

double HLong,LLong,HShort,LShort;

HLong=iHigh(NULL,0,iHighest(NULL,0,2,LengthI,2));

LLong=iLow(NULL,0,iLowest(NULL,0,1,LengthO,2));

LShort=iLow(NULL,0,iLowest(NULL,0,1,LengthI,2));

HShort=iHigh(NULL,0,iHighest(NULL,0,2,LengthO,2));

int cnt, cot, ticket, total;

total=OrdersTotal();

if (total<1)

{

if (iClose(NULL,0,1)>HLong)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,LLong,300000, "EA Long",123,0,Green);

if (ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Открыт длинный ордер : ",OrderOpenPrice());

}

else

Print("Ошибка при открытии длинного ордера : ",GetLastError());

return(0);

}

if (iClose(NULL,0,1)<LShort)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,HShort,0.0001, "EA Short",123,0,Red);

if (ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Открыт короткий ордер:",OrderOpenPrice());

}

else Print("Ошибка открытия SHORT ордера:",GetLastError());

return(0);

}

return(0);

}

for(cnt=0;cnt<total;cnt++)

{ //10

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY) // длинная позиция открыта

{

// должна ли она быть закрыта?

if(Bid<=LLong)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);//закрываем позицию

return(0);

}

//модификация трейлинг-стопа

OrderModify(OrderTicket(),OrderOpenPrice(),LLong,OrderTakeProfit(),0,Green);

return(0);

}

else

{

if(Ask>=HShort)

{OrderClose(OrderTicket(),OrderLots(),Ask,3,Purple);//закрытие позиции

return(0);

}

//модификация трейлинг-стопа

OrderModify(OrderTicket(),OrderOpenPrice(),HShort,OrderTakeProfit(),0,Red);

return(0);

}

}

}

//получаем общее количество лотов длинных и коротких ордеров

double LOrderLots=0;

double SOrderLots=0;

for(cnt=0,cnt<=total,cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol()&&OrderType()==OP_BUY)

LOrderLots=LOrderLots+OrderLots();

if(OrderSymbol()==Symbol()&&OrderType()==OP_SELL)

SOrderLots=LOrderLots+OrderLots();

}

//увеличиваем открытый ордер

for(cot=0,cot<=total,cot++)

{ //1

//добавляем позицию для длинного ордера

if(OrderSelect(cot,SELECT_BY_POS,MODE_TRADES)==true) //если есть открытые ордера

{ if(OrderMagicNumber==123 && OrderSymbol()==Symbol()&&OrderType()==OP_BUY) //2- если открытый ордер был открыт советником pooh abd type is Long

{ //3

for(int i=1;i<=15;i++)

{ if(Bid>=OrderOpenPrice()+i*0.5*iATR(NULL,0,N1,0)&&(Bid<(OrderOpenPrice()+(i+1)*0.5*iATR(NULL,0,N1,0))&&LOrderLots<Lots*(i+1)) //4

{ ticket=OrderSend(Symbol(),OP_BUY,NLots*Lots,Ask,3,LLong,300000, "EA Long",123,0,Green); //5

if (ticket>0)

{ //6

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Открыт длинный ордер : ",OrderOpenPrice());

} //6

иначе

Print("Ошибка при открытии длинного ордера : ",GetLastError());

break;

} //5

} //4

return(0);

//добавление позиции для короткого ордера

if(OrderMagicNumber()==123 && OrderSymbol()==Symbol() && OrderType()==OP_SELL)

{ //7

for(int n2=1;n2<=15;n2++)

{ if(Ask(OrderOpenPrice()-(n2+1)*0.5*iATR(NULL,0,N1,0))&&SOrderLots<Lots*(n2+1)) //8

{ ticket=OrderSend(Symbol(),OP_SELL,NLots*Lots,Bid,3,HShort,0.0001, "EA Short",123,0,Red); //9

if (ticket>0)

{ // 10

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Открыт короткий ордер : ",OrderOpenPrice());

} // 10

else

Print("Ошибка при открытии короткого ордера : ",GetLastError());

break;

} //9

} //8

return(0);

} //7

} //3

} //2

} //1

return(0)

}

 

НУЖЕН кодер для создания простого индикатора

Мне нужно, чтобы кто-то написал индикатор, который делает это:

На простом Фибоначчи, используя только линии 0,50,100. Когда бар закрывается выше 50% или ниже 50%, но с возможностью выбора, если я ищу закрытие выше или ниже, а не оба. Если я ищу закрытие ниже 50%, я не хочу, чтобы каждый раз, когда бар закрывается выше 50, срабатывало оповещение. Я хочу, чтобы он оповещал меня звуком и посылал мне сообщение по электронной почте и/или текст. Возможно ли это? Спасибо!!!

ИЗОБРАЖЕНИЕ: http://tinypic.com/r/dhbu6v/5

 

Пытаюсь закодировать простую логику, не получается!

Здравствуйте форумчане,

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

Итак, я хочу сделать автоматическую торговлю

размер лота 0.1

стоплосс = 30 пунктов

цель прибыли 50 пунктов

пара AUDUSD

Если (highprice - lowprice) < 60 пунктов между 02:00 GMT и 10:00 GMT, то продаем AUDUSD по lowprice - 5 пунктов или покупаем AUDUSD по highprice + 5 пунктов, иначе сделки нет

 
Avasys:
Здравствуйте Форум,

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

Итак, я хочу сделать автоматическую торговлю

размер лота 0.1

стоплосс = 30 пунктов

цель прибыли 50 пунктов

пара AUDUSD

Если (highprice - lowprice) < 60 пунктов между 02:00 GMT и 10:00 GMT , то продайте AUDUSD по lowprice - 5 пунктов или купите AUDUSD по highprice + 5 пунктов, иначе сделки нет

[lang=pl]Привет, я думаю, что это не проблема, чтобы закодировать этот советник, но у меня есть вопрос.

Когда вы хотите покупать/продавать? Нужны ли вам отложенные ордера на уровнях low-5 high+5?

с уважением,

Grzesiek[/lang]

 
g.pociejewski:
[lang=pl]Привет, я думаю, что это не проблема, чтобы закодировать этот советник, но у меня есть вопрос.

Когда вы хотите покупать/продавать? Нужны ли вам отложенные ордера на уровнях low-5 high+5?

пожелания,

Grzesiek[/lang]

Здравствуйте,

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

Да, точнее торговый диапазон AUDUSD (разница между высокой и низкой ценой) между 02:00 GMT и 10:00 GMT (это очень важно в коде) составляет менее 60 пунктов, так что это торговый сигнал. Таким образом, вы продаете, если цена достигает низкой цены (между 02:00 и 10:00) - 5 пунктов, и покупаете, если цена достигает высокой цены + 5 пунктов.

пример

между 02:00 и 10:00 GBPUSD низкая цена была 1.6000, высокая - 1.6050, поэтому если цена достигает 1.5995, вы автоматически продаете, а если цена достигает 1.6055, вы автоматически покупаете, автоматически размещая ордер стоп-лосс на 30 пунктов и тейк-профит на 50 пунктов.

Если у вас нет времени, просто подскажите мне, как начать, я читал уроки, но у меня нет практики, чтобы сделать работу.

спасибо

 
pooh123:
Здравствуйте, я работаю над советником и при компиляции получаю сообщение об ошибке: "'\end_of_program' - несбалансированная левая скобка." Обычно это сообщение об ошибке связано с неравным количеством левых и правых скобок. Однако я проверил свои коды вдоль и поперек и обнаружил, что у меня одинаковое количество левых и правых скобок. Так что это сводит меня с ума, что я не могу понять, где это пошло не так. Может ли кто-нибудь проверить мои коды и сказать мне, как это исправить? Спасибо миллион. Мои коды приведены ниже:

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

//| Breakout.mq4 |

//| Pooh |

//| |

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

#property copyright "Pooh"

#property link ""

//--- входные параметры

extern int LengthI=23;//для входа в рынок

extern int LengthO=7;//для выхода из рынка

extern double Lots=0.1; //для размера ордера

extern int N1=14; //период для ATR

extern int NLots=1; //количество увеличенных лотов ордера

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

//| функция инициализации эксперта |

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

int init()

{

//----

//----

return(0);

}

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

//| функция деинициализации эксперта | |

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

int deinit()

{

//----

//----

return(0);

}

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

//| функция запуска эксперта |

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

int start()

{

//----

double HLong,LLong,HShort,LShort;

HLong=iHigh(NULL,0,iHighest(NULL,0,2,LengthI,2));

LLong=iLow(NULL,0,iLowest(NULL,0,1,LengthO,2));

LShort=iLow(NULL,0,iLowest(NULL,0,1,LengthI,2));

HShort=iHigh(NULL,0,iHighest(NULL,0,2,LengthO,2));

int cnt, cot, ticket, total;

total=OrdersTotal();

if (total<1)

{

if (iClose(NULL,0,1)>HLong)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,LLong,300000, "EA Long",123,0,Green);

if (ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Открыт длинный ордер : ",OrderOpenPrice());

}

else

Print("Ошибка при открытии длинного ордера : ",GetLastError());

return(0);

}

if (iClose(NULL,0,1)<LShort)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,HShort,0.0001, "EA Short",123,0,Red);

if (ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Открыт короткий ордер:",OrderOpenPrice());

}

else Print("Ошибка открытия SHORT ордера:",GetLastError());

return(0);

}

return(0);

}

for(cnt=0;cnt<total;cnt++)

{ //10

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY) // длинная позиция открыта

{

// должна ли она быть закрыта?

if(Bid<=LLong)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);//закрываем позицию

return(0);

}

//модификация трейлинг-стопа

OrderModify(OrderTicket(),OrderOpenPrice(),LLong,OrderTakeProfit(),0,Green);

return(0);

}

else

{

if(Ask>=HShort)

{OrderClose(OrderTicket(),OrderLots(),Ask,3,Purple);//закрытие позиции

return(0);

}

//модификация трейлинг-стопа

OrderModify(OrderTicket(),OrderOpenPrice(),HShort,OrderTakeProfit(),0,Red);

return(0);

}

}

}

//получаем общее количество лотов длинных и коротких ордеров

double LOrderLots=0;

double SOrderLots=0;

for(cnt=0,cnt<=total,cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol()&&OrderType()==OP_BUY)

LOrderLots=LOrderLots+OrderLots();

if(OrderSymbol()==Symbol()&&OrderType()==OP_SELL)

SOrderLots=LOrderLots+OrderLots();

}

//увеличиваем открытый ордер

for(cot=0,cot<=total,cot++)

{ //1

//добавляем позицию для длинного ордера

if(OrderSelect(cot,SELECT_BY_POS,MODE_TRADES)==true) //если есть открытые ордера

{ if(OrderMagicNumber==123 && OrderSymbol()==Symbol()&&OrderType()==OP_BUY) //2- если открытый ордер был открыт советником pooh abd type is Long

{ //3

for(int i=1;i<=15;i++)

{ if(Bid>=OrderOpenPrice()+i*0.5*iATR(NULL,0,N1,0)&&(Bid<(OrderOpenPrice()+(i+1)*0.5*iATR(NULL,0,N1,0))&&LOrderLots<Lots*(i+1)) //4

{ ticket=OrderSend(Symbol(),OP_BUY,NLots*Lots,Ask,3,LLong,300000, "EA Long",123,0,Green); //5

if (ticket>0)

{ //6

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Открыт длинный ордер : ",OrderOpenPrice());

} //6

иначе

Print("Ошибка при открытии длинного ордера : ",GetLastError());

break;

} //5

} //4

return(0);

//добавление позиции для короткого ордера

if(OrderMagicNumber()==123 && OrderSymbol()==Symbol() && OrderType()==OP_SELL)

{ //7

for(int n2=1;n2<=15;n2++)

{ if(Ask(OrderOpenPrice()-(n2+1)*0.5*iATR(NULL,0,N1,0))&&SOrderLots<Lots*(n2+1)) //8

{ ticket=OrderSend(Symbol(),OP_SELL,NLots*Lots,Bid,3,HShort,0.0001, "EA Short",123,0,Red); //9

if (ticket>0)

{ // 10

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Открыт короткий ордер : ",OrderOpenPrice());

} // 10

else

Print("Ошибка при открытии короткого ордера : ",GetLastError());

break;

} //9

} //8

return(0);

} //7

} //3

} //2

} //1

return(0)

}

[lang=pl]Здравствуйте, есть небольшая ошибка, два несбалансированных ")" в функции OrderMagicNumer, вы должны использовать () в конце. В цикле for вы должны использовать ";" вместо ",".

Если вам нужно найти несбалансированные скобки, я рекомендую вам Notepad ++ [/lang].

Файлы:
eamod.mq4  5 kb