MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 1838 1...183118321833183418351836183718381839184018411842184318441845...1953 Yeni yorum законопослушный гражданин 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 ))); } bir tür toplandı, ancak test cihazında yalnızca bir kez çalışıyor bir test daha yaparsanız - tek bir işlem açmaz ilk test sırasında aralık belirlenir, ancak lot başlangıç değerine sıfırlanırsa, daha fazla fırsat açmaz. nerede hata yaptım? Güvenli, karlı ve heyecan Vince'e göre lot hesaplama [UYARI, KONU KAPALI!] Forumu Alekseu Fedotov 2021.12.31 15:51 #18372 законопослушный гражданин # : bir tür toplandı, ancak test cihazında yalnızca bir kez çalışıyor bir test daha yaparsanız - tek bir işlem açmaz ilk test sırasında aralık belirlenir, ancak lot başlangıç değerine sıfırlanırsa, daha fazla fırsat açmaz. nerede hata yaptım? Genellikle bundan önce f1 tuşuna basın, işlevlere tıklayın ve şunu okuyun: Sipariş, OrderSelect() işlevi kullanılarak önceden seçilmelidir. Bu, OrderLots() işlevi içindir; Üzgünüm sarhoş. Yeni Yılın Kutlu Olsun! Alekseu Fedotov 2021.12.31 15:56 #18373 законопослушный гражданин # : bir tür toplandı, ancak test cihazında yalnızca bir kez çalışıyor bir test daha yaparsanız - tek bir işlem açmaz ilk test sırasında aralık belirlenir, ancak lot başlangıç değerine sıfırlanırsa, daha fazla fırsat açmaz. nerede hata yaptım? Sunmak Bu işlevi deneyin: //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. 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 # : Sunmak Bu işlevi deneyin: Teşekkür ederim mutlu yıllar) Vladimir Simakov 2021.12.31 16:21 #18375 Andrey Sokolov # : Evet. Mümkün olduğunca basit yaptım, uygulamaya bağladım, orada çalışıyor. TestLib bağlamında mql5'i mi çağırıyorsunuz? TestLib::TestClass::Inc() olmalıdır Alekseu Fedotov 2021.12.31 16:35 #18376 законопослушный гражданин # : Teşekkür ederim mutlu yıllar) Varsa iletişime geçin! Andrei Sokolov 2021.12.31 18:35 #18377 законопослушный гражданин # : toplanmış, ancak test cihazında yalnızca bir kez çalışır nerede hata yaptım? Bir hata ayıklayıcı, bu tür sorunları çözmede çok yardımcı olur. kullanmanı tavsiye ederim Andrei Sokolov 2021.12.31 18:35 #18378 Vladimir Simakov # : TestLib bağlamında mql5'i mi çağırıyorsunuz? TestLib::TestClass::Inc() olmalıdır teşekkürler Tretyakov Rostyslav 2022.01.01 09:32 #18379 законопослушный гражданин # : bir tür toplandı, ancak test cihazında yalnızca bir kez çalışıyor nerede hata yaptım? // Параметры советника 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 # : Teşekkür ederim. ve GetInfoLastPos()'u void aracılığıyla yazdım.... 1...183118321833183418351836183718381839184018411842184318441845...1953 Yeni yorum
bir tür toplandı, ancak test cihazında yalnızca bir kez çalışıyor
bir test daha yaparsanız - tek bir işlem açmaz
ilk test sırasında aralık belirlenir, ancak lot başlangıç değerine sıfırlanırsa, daha fazla fırsat açmaz.
nerede hata yaptım?
bir tür toplandı, ancak test cihazında yalnızca bir kez çalışıyor
bir test daha yaparsanız - tek bir işlem açmaz
ilk test sırasında aralık belirlenir, ancak lot başlangıç değerine sıfırlanırsa, daha fazla fırsat açmaz.
nerede hata yaptım?
Genellikle bundan önce f1 tuşuna basın, işlevlere tıklayın ve şunu okuyun:
Sipariş, OrderSelect() işlevi kullanılarak önceden seçilmelidir.
Bu, OrderLots() işlevi içindir;
Üzgünüm sarhoş.
Yeni Yılın Kutlu Olsun!
bir tür toplandı, ancak test cihazında yalnızca bir kez çalışıyor
bir test daha yaparsanız - tek bir işlem açmaz
ilk test sırasında aralık belirlenir, ancak lot başlangıç değerine sıfırlanırsa, daha fazla fırsat açmaz.
nerede hata yaptım?
Sunmak
Bu işlevi deneyin:
Sunmak
Bu işlevi deneyin:
Teşekkür ederim mutlu yıllar)
Evet. Mümkün olduğunca basit yaptım, uygulamaya bağladım, orada çalışıyor.
Teşekkür ederim mutlu yıllar)
Varsa iletişime geçin!
toplanmış, ancak test cihazında yalnızca bir kez çalışır
nerede hata yaptım?
Bir hata ayıklayıcı, bu tür sorunları çözmede çok yardımcı olur. kullanmanı tavsiye ederim
TestLib bağlamında mql5'i mi çağırıyorsunuz? TestLib::TestClass::Inc() olmalıdır
teşekkürler
bir tür toplandı, ancak test cihazında yalnızca bir kez çalışıyor
nerede hata yaptım?Teşekkür ederim.
ve GetInfoLastPos()'u void aracılığıyla yazdım....