Вот именно для этого и прошу помощи) Для меня впринципе не важно, будет-ли он настоящим мульти.. или просто различать чужие ордера.. Суть одна - заставить работать на нескольких парах, а не на одной) Да и потестить на демке не проблема, месяц-пару.. просто интересен результат)
Сформулируйте логику работы мультивальтного эксперта, чем подробней тем лучше и возможно вам помощь уже и не понадобится.
Как правило четкое осознание задачи 90% успеха её реализации.
Сформулируйте логику работы мультивальтного эксперта, чем подробней тем лучше и возможно вам помощь уже и не понадобится.
Как правило четкое осознание задачи 90% успеха её реализации.
Да с логикой всё впорядке) Опыта просто нет.. Я понимаю, что нужно отслеживать ордера по какому-либо признаку, но так как ниразу не писал ничего подобного боюсь что просто будут одни вопросы... про функции и их реализации)
Да с логикой всё впорядке) Опыта просто нет.. Я понимаю, что нужно отслеживать ордера по какому-либо признаку, но так как ниразу не писал ничего подобного боюсь что просто будут одни вопросы... про функции и их реализации)
Да с логикой всё впорядке) Опыта просто нет.. Я понимаю, что нужно отслеживать ордера по какому-либо признаку, но так как ниразу не писал ничего подобного боюсь что просто будут одни вопросы... про функции и их реализации)
Ээх.... боюсь вы не поняли..............
Задача - "хочу чтоб оно летало", эт не логига, - что летало куда летало и т.д и т.п.
--------------------------------------------
Краткий пример задачи:
Одновременная работа с валютными парами EURUSD, GBPUSD, USDCHF, USDJPY.
Период H1.
......................
условие выбора валютной пары
условие установки BUY
условие установки SELL
.......................
Краткий пример реализации:
int MAGIC =322223;string Sym[]={"EURUSD","GBPUSD","USDCHF","USDJPY"};//Внесем в массив валютные пары с которыми будем работатьint start(){int s = SymbolSelect();//Функция выбора валютной парыif(SelectOrder(Sym[s],OP_BUY,MAGIC)<0){//Если нет установленного ордера по выбранному символу
UpTrend(Sym[s]);//Проверим условие установки ордера }if(SelectOrder(Sym[s],OP_SELL,MAGIC)<0){//Если нет установленного ордера по выбранному символу
DownTrend(Sym[s]);//Проверим условие установки ордера }}int SymbolSelect(){int s=-1;//Условие выбора валютной пары для работы return(s)}//+-------------------Выбор ордера---------------------------+int SelectOrder(string Sym,int Tip,int MAGIC){int TotOrd=OrdersTotal();int OrdTick=-1;for(int OrdPos=TotOrd-1;OrdPos>=0;OrdPos--){if(OrderSelect(OrdPos, SELECT_BY_POS, MODE_TRADES)==true){if(OrderSymbol()==Sym){//Есть ли ордера с нужным символомif(OrderType()==Tip){//Если нужный тип ордера if(MAGIC==0){MAGIC=OrderMagicNumber();}//Если магик = 0,неучитыватьif(OrderMagicNumber()== MAGIC){//Есть ли ордера с нужным Магик номером
OrdTick =OrderTicket();break;//Запишем в переменную его тикет и прервем цикл }}}}}return(OrdTick);//Возвращает тикет найденного ордера или -1}bool UpTrend(string Sym){//Условие установки BUY ордера}bool DownTrend(string Sym){//Условие установки SELL ордера}
ну и т.д.
я об этом, если вы детально продумаете логику, то проблем с реализацией у вас не возникнет.
...я об этом, если вы детально продумаете логику, то проблем с реализацией у вас не возникнет.
Буду сегодня обдумывать... Чувствую нашел я себе головную боль)) Спасибо.
Вобщем вот черновик с ошибками... поправьте плиз!)
externdouble Profit =3000;int MAGIC =322223;string Sym[]={"EURUSD","GBPUSD","USDCHF","USDJPY"};//Внесем в массив валютные пары с которыми будем работатьdouble b0,b1,s0,s1,StopLoss,Enter;bool dwnSym,upSym,mod;int init(){Profit*=Point;}int start(){int s = SymbolSelect();//Функция выбора валютной парыif(SelectOrder(Sym[s],OP_BUYSTOP,MAGIC)<0){//Если нет установленного ордера по выбранному символу
UpTrend(Sym[s]);//Проверим условие установки ордера }if(SelectOrder(Sym[s],OP_SELLSTOP,MAGIC)<0){//Если нет установленного ордера по выбранному символу
DownTrend(Sym[s]);//Проверим условие установки ордера }if(SelectOrder(Sym[s],OP_BUYSTOP,MAGIC)>0&&AccountProfit()&&(!mod)){//Если установлен ордер по выбранному символу
SetStopBuy(Sym[s]);//и он открылся, ставим стоп}if(SelectOrder(Sym[s],OP_SELLSTOP,MAGIC)>0&&AccountProfit()&&(!mod)){//Если установлен ордер по выбранному символу
SetStopSell(Sym[s]);//и он открылся, ставим стоп}}int SymbolSelect(){int s=-1;return(s);}//+-------------------Выбор ордера---------------------------+int SelectOrder(string Sym,int Tip,int MAGIC){int TotOrd=OrdersTotal();int OrdTick=-1;for(int OrdPos=TotOrd-1;OrdPos>=0;OrdPos--){if(OrderSelect(OrdPos, SELECT_BY_POS, MODE_TRADES)==true){if(OrderSymbol()==Sym){//Есть ли ордера с нужным символомif(OrderType()==Tip){//Если нужный тип ордера if(MAGIC==0){MAGIC=OrderMagicNumber();}//Если магик = 0,неучитыватьif(OrderMagicNumber()== MAGIC){//Есть ли ордера с нужным Магик номером
OrdTick =OrderTicket();break;//Запишем в переменную его тикет и прервем цикл }}}}}return(OrdTick);}//Возвращает тикет найденного ордера или -1//Условие и установка BUY ордераbool UpTrend(string Sym){if((iOpen(Sym,PERIOD_H4,1)-iClose(Sym,PERIOD_H4,1)<=0)&&(iOpen(Sym,PERIOD_H4,2)-iClose(Sym,PERIOD_H4,2)>0)){
upSym=false;
dwnSym=true;
CloseOpenOrdersAndCancelPending();double Enter=iHigh(Sym,PERIOD_H4,1)+(Ask-Bid)+10*Point;OrderSend(Sym,OP_BUYSTOP,0.1, Enter,0,0,Ask+Profit,0,0,0,Green);}}//Условие и установка SELL ордераbool DownTrend(string Sym){if((iOpen(Sym,PERIOD_H4,1)-iClose(Sym,PERIOD_H4,1)>=0)&&(iOpen(Sym,PERIOD_H4,2)-iClose(Sym,PERIOD_H4,2)<0)){
upSym=true;
dwnSym=false;
CloseOpenOrdersAndCancelPending();double Enter=iLow(Sym,PERIOD_H4,1)-10*Point;OrderSend(Sym,OP_SELLSTOP,0.1, Enter,0,0,Bid-Profit,0,0,0,Green);}}//-------Вычисление и утановка стопа для байvoid SetStopBuy(string Sym){RefreshRates();double b0=iLow(Sym,PERIOD_H4,0)-10*Point;double b1=iLow(Sym,PERIOD_H4,1)-10*Point;if(b0<b1) StopLoss=b1;else StopLoss=b0;RefreshRates();
mod=OrderModify(OrdTick,OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Red);}//-------Вычисление и утановка стопа для селvoid SetStopSell(string Sym){RefreshRates();double s0=iHigh(Sym,PERIOD_H4,0)+(Ask-Bid)+10*Point;double s1=iHigh(Sym,PERIOD_H4,1)+(Ask-Bid)+10*Point;if(s0<s1) StopLoss=s0;else StopLoss=s1;RefreshRates();
mod=OrderModify(OrdTick,OrderOpenPrice(),StopLoss,OrderTakeProfit(),0,Red);}void CloseOpenOrdersAndCancelPending(){for(int i=OrdersTotal()-1;i>=0;i--){if(!OrderSelect(i,SELECT_BY_POS))continue;if(OrderSymbol()!=Sym)continue;OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),10);}}
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Можно малость переделать мою функцию, что бы возвращала общее количество ордеров по данному инструменту и магику.
Вот именно для этого и прошу помощи) Для меня впринципе не важно, будет-ли он настоящим мульти.. или просто различать чужие ордера.. Суть одна - заставить работать на нескольких парах, а не на одной) Да и потестить на демке не проблема, месяц-пару.. просто интересен результат)
Сформулируйте логику работы мультивальтного эксперта, чем подробней тем лучше и возможно вам помощь уже и не понадобится.
Как правило четкое осознание задачи 90% успеха её реализации.
и кстати, а у вас в коде то ошибочки! куча!
iLow(PERIOD_H4,0,0) - это как понимать?
Лоу текущей свечи))
И правда...! Как же оно вообще тогда работает на тесте?
Не пойму как так у меня получилось.. Должно быть так - iLow(NULL,PERIOD_H4,0)
Сформулируйте логику работы мультивальтного эксперта, чем подробней тем лучше и возможно вам помощь уже и не понадобится.
Как правило четкое осознание задачи 90% успеха её реализации.
Да с логикой всё впорядке) Опыта просто нет.. Я понимаю, что нужно отслеживать ордера по какому-либо признаку, но так как ниразу не писал ничего подобного боюсь что просто будут одни вопросы... про функции и их реализации)
Да с логикой всё впорядке) Опыта просто нет.. Я понимаю, что нужно отслеживать ордера по какому-либо признаку, но так как ниразу не писал ничего подобного боюсь что просто будут одни вопросы... про функции и их реализации)
Функцию на рпедыдущей странице посмотри
Функцию на рпедыдущей странице посмотри
Спасибо) попробую в код воткнуть)
Начал писать..
#define MAGIC 7779вместо этого -
пишу это -
.. ругается - 'Order_Count_Calculate' - function returns no result
Если правильно понимаю функция должна найти все ордера текущего символа Symbol() с магиком MAGICСпасибо) попробую в код воткнуть)
Начал писать..
Вот этого точно не надо extern string _Symbol = Symbol();
Хотя переменную можно и определить, а значение присвоить лучше в инит() или старт()
Да с логикой всё впорядке) Опыта просто нет.. Я понимаю, что нужно отслеживать ордера по какому-либо признаку, но так как ниразу не писал ничего подобного боюсь что просто будут одни вопросы... про функции и их реализации)
Ээх.... боюсь вы не поняли..............
Задача - "хочу чтоб оно летало", эт не логига, - что летало куда летало и т.д и т.п.
--------------------------------------------
Краткий пример задачи:
Одновременная работа с валютными парами EURUSD, GBPUSD, USDCHF, USDJPY.
Период H1.
......................
условие выбора валютной пары
условие установки BUY
условие установки SELL
.......................
Краткий пример реализации:
ну и т.д.
я об этом, если вы детально продумаете логику, то проблем с реализацией у вас не возникнет.
...я об этом, если вы детально продумаете логику, то проблем с реализацией у вас не возникнет.
Буду сегодня обдумывать... Чувствую нашел я себе головную боль)) Спасибо.
Вобщем вот черновик с ошибками... поправьте плиз!)