Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1838 1...183118321833183418351836183718381839184018411842184318441845...1954 Nuevo comentario законопослушный гражданин 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))); } parece haber sido montado, pero sólo funciona una vez en el probador Si hago una prueba más, no se abre ningún trato Cuando hago la primera prueba, el intervalo se establece, pero si el lote se restablece al lote inicial, no abre más operaciones. ¿dónde me he equivocado? Asesores Expertos: MQL5 Wizard El magnífico tío Martin Discusión sobre el artículo Alekseu Fedotov 2021.12.31 15:51 #18372 законопослушный гражданин #:parece haber sido montado, pero sólo funciona una vez en el probador Si hago una prueba más, no se abre ningún trato Cuando hago la primera prueba, el intervalo se establece, pero si el lote se restablece al lote inicial, no abre más operaciones. ¿En qué me he equivocado? Pulse más veces f1 antes de hacer clic en las funciones y leer: El pedido debe ser preseleccionado mediante la función OrderSelect(). Se trata de la función OrderLots(); Lo siento borracho. ¡Feliz Año Nuevo! [¡AVISO CERRADO!] Cualquier pregunta [¡Archivo!] Cualquier pregunta de [ARCHIVO] Cualquier pregunta de Alekseu Fedotov 2021.12.31 15:56 #18373 законопослушный гражданин #:parece haber sido montado, pero sólo funciona una vez en el probador Si hago una prueba más, no se abre ningún trato Cuando hago la primera prueba, el intervalo se establece, pero si el lote se restablece al lote inicial, no abre más operaciones. ¿dónde me he equivocado? Presentado por Prueba esta función: //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. 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 Prueba esta función: Gracias) Felices fiestas) Vladimir Simakov 2021.12.31 16:21 #18375 Andrey Sokolov #:Sí. Lo hice lo más sencillo posible, lo conecté a la aplicación y funciona. ¿Y lo llamas en mql5 en el contexto de TestLib? Debería ser TestLib::TestClass::Inc() Alekseu Fedotov 2021.12.31 16:35 #18376 законопослушный гражданин #:Gracias) ¡Feliz año nuevo!) ¡Cuando quieras! Andrei Sokolov 2021.12.31 18:35 #18377 законопослушный гражданин #:Creo que lo he conseguido, pero sólo funciona una vez en el probador ¿dónde me he equivocado? El depurador es bueno para resolver estos problemas. Recomiendo su uso Andrei Sokolov 2021.12.31 18:35 #18378 Vladimir Simakov #: ¿Y lo llamas en mql5 en el contexto de TestLib? Debería ser TestLib::TestClass::Inc() Gracias Tretyakov Rostyslav 2022.01.01 09:32 #18379 законопослушный гражданин #:parece haber sido montado, pero sólo funciona una vez en el probador¿En qué me he equivocado? // Параметры советника 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 #: Gracias. Heutilizado un void para getInfoLastPos().... 1...183118321833183418351836183718381839184018411842184318441845...1954 Nuevo comentario
parece haber sido montado, pero sólo funciona una vez en el probador
Si hago una prueba más, no se abre ningún trato
Cuando hago la primera prueba, el intervalo se establece, pero si el lote se restablece al lote inicial, no abre más operaciones.
¿dónde me he equivocado?
parece haber sido montado, pero sólo funciona una vez en el probador
Si hago una prueba más, no se abre ningún trato
Cuando hago la primera prueba, el intervalo se establece, pero si el lote se restablece al lote inicial, no abre más operaciones.
¿En qué me he equivocado?
Pulse más veces f1 antes de hacer clic en las funciones y leer:
El pedido debe ser preseleccionado mediante la función OrderSelect().
Se trata de la función OrderLots();
Lo siento borracho.
¡Feliz Año Nuevo!
parece haber sido montado, pero sólo funciona una vez en el probador
Si hago una prueba más, no se abre ningún trato
Cuando hago la primera prueba, el intervalo se establece, pero si el lote se restablece al lote inicial, no abre más operaciones.
¿dónde me he equivocado?
Presentado por
Prueba esta función:
Regalo
Prueba esta función:
Gracias) Felices fiestas)
Sí. Lo hice lo más sencillo posible, lo conecté a la aplicación y funciona.
Gracias) ¡Feliz año nuevo!)
¡Cuando quieras!
Creo que lo he conseguido, pero sólo funciona una vez en el probador
¿dónde me he equivocado?
El depurador es bueno para resolver estos problemas. Recomiendo su uso
¿Y lo llamas en mql5 en el contexto de TestLib? Debería ser TestLib::TestClass::Inc()
Gracias
parece haber sido montado, pero sólo funciona una vez en el probador
¿En qué me he equivocado?Gracias.
Heutilizado un void para getInfoLastPos()....