Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1838 1...183118321833183418351836183718381839184018411842184318441845...1953 Nuovo commento законопослушный гражданин 2021.12.31 15:28 #18371 Tretyakov Rostyslav #: // Параметры советника input string sParametersEA = ""; // Параметры советника input double Lot = 0.01; // Количество лотов input double Lotcontrol = 0.08; // ----- input int StopLoss = 30; // Стоп (SL) input int TakeProfit = 30; // Тейк (TP) input int HourPause = 1; // Пауза в часах input int Slippage = 3; // Проскальзование (в пунктах) input int Magic = 1; // Индентификатор советника input double K_Martin1 = 0.01; // Множитель мартин 1 input double K_Martin2 = 1.9; // Множитель мартин 2 input double K_Martin3 = 1.4; // Множитель мартин 3 input int OrdersClose = 3; // Ограничение лотности мартин1 input int OrdersClose2 = 5; // Ограничение лотности мартин2 input int DigitsLot = 2; // Точность лотности // Параметры индикатора input string sParametersMA = ""; // Параметры индикатора input int PeriodMA = 14; // Период мувинга input int MovingShift = 1; // Сдвиг мувинга // Глобальные переменные datetime Start=0,newbar; double dMA; double MaxMartinLot; double MaxMartinLot2; //+-----------------------------------------------------------------------------------------------+ int OnInit() { Start = TimeCurrent(); MaxMartinLot = Lot*MathPow(1.4,OrdersClose); MaxMartinLot2 = Lot*MathPow(K_Martin2,OrdersClose2); int Y = 15; DrawLABEL("nextlot",1,5,Y,clrLime,""); Y += 20; DrawLABEL("currentlot",1,5,Y,clrLime,""); Y += 30; return(INIT_SUCCEEDED); } //+-----------------------------------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+-----------------------------------------------------------------------------------------------+ void OnTick() { // Получим значение индикатора dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0. // выключаем торговлю if (OrderLots()>=Lotcontrol) { Start=TimeCurrent()+(HourPause*60*60); } // Если нет открытых ордеров, то входим в условие if((CountOrders()==0)&& Start<=TimeCurrent()) { // Если появился сигнал на покупку, то откроем ордер на покупку if(bSignalBuy() == true) vOrderOpenBuy(); // Если появился сигнал на продажу, то откроем ордер на продажу if(bSignalSell() == true) vOrderOpenSell(); } // Пишем какой лот текущий и какой следующий DrawLABEL("nextlot",1,5,0,Color1(),StringConcatenate("CURRENT LOT: ",DoubleToStr(LOT(),2))); DrawLABEL("currentlot",1,5,0,Color2(),StringConcatenate("NEXT LOT: ",DoubleToStr(LOT(),2))); } sembra essere stato assemblato, ma funziona solo una volta nel tester Se faccio un altro test, non si apre nessun accordo Quando faccio il primo test, l'intervallo è impostato, ma se il lotto viene riportato al lotto di partenza, non apre più nessuna operazione. dove ho sbagliato? Discussione sull articolo "Come C'è un supporto di Universale MA Croce EA Alekseu Fedotov 2021.12.31 15:51 #18372 законопослушный гражданин #:sembra essere stato assemblato, ma funziona solo una volta nel tester Se faccio un altro test, non apre nessun trade Quando faccio il primo test, l'intervallo è impostato, ma se il lotto viene riportato al lotto di partenza, non apre più nessuna operazione. Dove ho sbagliato? Premere f1 più spesso prima di cliccare su funzioni e leggere: L'ordine deve essere preselezionato utilizzando la funzione OrderSelect(). Questo è per la funzione OrderLots(); Scusa ubriaco. Buon anno! Alekseu Fedotov 2021.12.31 15:56 #18373 законопослушный гражданин #:sembra essere stato assemblato, ma funziona solo una volta nel tester Se faccio un altro test, non si apre nessun accordo Quando faccio il primo test, l'intervallo è impostato, ma se il lotto viene riportato al lotto di partenza, non apre più nessuna operazione. dove ho sbagliato? Presentato da Provate questa funzione: //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает сумму лотов открытых позиций | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ double GetAmountLotFromOpenPos(string sy="",int op=-1,int mn=-1) { double l=0; int i,k=OrdersTotal(); if(sy=="0") sy=Symbol(); for(i=0; i<k; i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==sy || sy=="") { if(OrderType()==OP_BUY || OrderType()==OP_SELL) { if(op<0 || OrderType()==op) { if(mn<0 || OrderMagicNumber()==mn) { l+=OrderLots(); } } } } } } return(l); } законопослушный гражданин 2021.12.31 16:04 #18374 Alekseu Fedotov #:Regalo Prova questa funzione: Grazie!) Buone vacanze) Vladimir Simakov 2021.12.31 16:21 #18375 Andrey Sokolov #:Sì, l'ho reso il più semplice possibile, l'ho inserito nell'app e funziona. E lo chiamate in mql5 nel contesto TestLib? Dovrebbe essere TestLib::TestClass::Inc() Alekseu Fedotov 2021.12.31 16:35 #18376 законопослушный гражданин #:Grazie!) Felice anno nuovo!) Quando vuoi! Andrei Sokolov 2021.12.31 18:35 #18377 законопослушный гражданин #:Penso di averlo messo insieme, ma funziona solo una volta nel tester dove ho sbagliato? Il debugger è buono per risolvere questi problemi. Raccomando di usarlo Andrei Sokolov 2021.12.31 18:35 #18378 Vladimir Simakov #: E lo chiamate in mql5 nel contesto TestLib? Dovrebbe essere TestLib::TestClass::Inc() Grazie Tretyakov Rostyslav 2022.01.01 09:32 #18379 законопослушный гражданин #:sembra essere stato assemblato, ma funziona solo una volta nel tester Dove ho sbagliato? // Параметры советника input string sParametersEA = ""; // Параметры советника input double Lot = 0.01; // Количество лотов input double Lotcontrol = 0.08; // ----- input int StopLoss = 30; // Стоп (SL) input int TakeProfit = 30; // Тейк (TP) input int HourPause = 1; // Пауза в часах input int Slippage = 3; // Проскальзование (в пунктах) input int Magic = 1; // Индентификатор советника input double K_Martin1 = 0.01; // Множитель мартин 1 input double K_Martin2 = 1.9; // Множитель мартин 2 input double K_Martin3 = 1.4; // Множитель мартин 3 input int OrdersClose = 3; // Ограничение лотности мартин1 input int OrdersClose2 = 5; // Ограничение лотности мартин2 input int DigitsLot = 2; // Точность лотности // Параметры индикатора input string sParametersMA = ""; // Параметры индикатора input int PeriodMA = 14; // Период мувинга input int MovingShift = 1; // Сдвиг мувинга // Глобальные переменные datetime Start=0,newbar; double dMA; double MaxMartinLot; double MaxMartinLot2; //+-----------------------------------------------------------------------------------------------+ int OnInit() { Start = TimeCurrent(); MaxMartinLot = Lot*MathPow(1.4,OrdersClose); MaxMartinLot2 = Lot*MathPow(K_Martin2,OrdersClose2); int Y = 15; DrawLABEL("nextlot",1,5,Y,clrLime,""); Y += 20; DrawLABEL("currentlot",1,5,Y,clrLime,""); Y += 30; return(INIT_SUCCEEDED); } //+-----------------------------------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+-----------------------------------------------------------------------------------------------+ void OnTick() { // Получим значение индикатора dMA = iMA(Symbol(), 0,PeriodMA, MovingShift, MODE_SMA, PRICE_CLOSE, 0); // MODE_SMA - простое усреднение , значение 0. PRICE_CLOSE- цена закрытия, значение 0. // выключаем торговлю if (GetInfoLastPos(1)>=Lotcontrol) { Start=GetInfoLastPos(3)+(HourPause*60*60); } // Если нет открытых ордеров, то входим в условие if((CountOrders()==0)&& Start<=TimeCurrent()) { // Если появился сигнал на покупку, то откроем ордер на покупку if(bSignalBuy() == true) vOrderOpenBuy(); // Если появился сигнал на продажу, то откроем ордер на продажу if(bSignalSell() == true) vOrderOpenSell(); } // Пишем какой лот текущий и какой следующий DrawLABEL("nextlot",1,5,0,Color1(),StringConcatenate("CURRENT LOT: ",DoubleToStr(LOT(),2))); DrawLABEL("currentlot",1,5,0,Color2(),StringConcatenate("NEXT LOT: ",DoubleToStr(LOT(),2))); } //+----------------------------------------------------------------------------+ //| Функция возвращает по символу и магику | //| 1 - размер лота последней закрытой позиции | //| 2 - размер профита с учетом комиссии и свопа последней закрытой позиции | //| 3 - время последней закрытой позиции | //+----------------------------------------------------------------------------+ double GetInfoLastPos(int a=1) { datetime t=0; double result=0,l=0,p=0,f=0; int i=OrdersHistoryTotal()-1; for(int pos=i;pos>=0;pos--) { if(OrderSelect(pos, SELECT_BY_POS, MODE_HISTORY)) { if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY || OrderType()==OP_SELL) { if(t<OrderCloseTime()) {t=OrderCloseTime(); l=OrderLots(); p=OrderProfit()+OrderCommission()+OrderSwap();} } } } } if(a==1) {result=l;} else if(a==2) {result=p;} else if(a==3) {result=(double)t;} else {result=0;} return(result); } законопослушный гражданин 2022.01.01 13:24 #18380 Tretyakov Rostyslav #: Grazie. E housato un void per getInfoLastPos().... 1...183118321833183418351836183718381839184018411842184318441845...1953 Nuovo commento
sembra essere stato assemblato, ma funziona solo una volta nel tester
Se faccio un altro test, non si apre nessun accordo
Quando faccio il primo test, l'intervallo è impostato, ma se il lotto viene riportato al lotto di partenza, non apre più nessuna operazione.
dove ho sbagliato?
sembra essere stato assemblato, ma funziona solo una volta nel tester
Se faccio un altro test, non apre nessun trade
Quando faccio il primo test, l'intervallo è impostato, ma se il lotto viene riportato al lotto di partenza, non apre più nessuna operazione.
Dove ho sbagliato?
Premere f1 più spesso prima di cliccare su funzioni e leggere:
L'ordine deve essere preselezionato utilizzando la funzione OrderSelect().
Questo è per la funzione OrderLots();
Scusa ubriaco.
Buon anno!
sembra essere stato assemblato, ma funziona solo una volta nel tester
Se faccio un altro test, non si apre nessun accordo
Quando faccio il primo test, l'intervallo è impostato, ma se il lotto viene riportato al lotto di partenza, non apre più nessuna operazione.
dove ho sbagliato?
Presentato da
Provate questa funzione:
Regalo
Prova questa funzione:
Grazie!) Buone vacanze)
Sì, l'ho reso il più semplice possibile, l'ho inserito nell'app e funziona.
Grazie!) Felice anno nuovo!)
Quando vuoi!
Penso di averlo messo insieme, ma funziona solo una volta nel tester
dove ho sbagliato?
Il debugger è buono per risolvere questi problemi. Raccomando di usarlo
E lo chiamate in mql5 nel contesto TestLib? Dovrebbe essere TestLib::TestClass::Inc()
Grazie
sembra essere stato assemblato, ma funziona solo una volta nel tester
Dove ho sbagliato?Grazie.
E housato un void per getInfoLastPos()....