Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1816 1...180918101811181218131814181518161817181818191820182118221823...1954 Nuevo comentario Tretyakov Rostyslav 2021.12.15 11:34 #18151 Alexander Avksentyev #:Siento haber sido intrusivo. No es ser intrusivo. Nunca tengas miedo de decir que no sabes algo: pregunta siempre. Le daré un ejemplo. Tretyakov Rostyslav 2021.12.15 11:42 #18152 Alexander Avksentyev #: ¿Qué son "iTrailStart" y "iTrailDist"? Alexander Avksentyev 2021.12.15 11:44 #18153 Tretyakov Rostyslav #:¿Qué son "iTrailStart" y "iTrailDist"? Número de puntos a encender y distancia del mercado a la red de arrastre iTrailStart = 10; //Número de puntos para habilitar el arrastre; iTrailDist = 10; //Distancia del stop al mercado; Si la orden está en el plus por 11 pips, entonces 11-10=1 pips sin pérdida. ¡Qué buen sistema! Discusión sobre el artículo [¡AVISO CERRADO!] Cualquier pregunta Tretyakov Rostyslav 2021.12.15 12:02 #18154 Alexander Avksentyev #:Número de puntos a incluir y distancia del mercado al tsl Más o menos //--- input parameters int iTrailStart = 10; //Кол-во пунктов для включения тралa int iTrailDist = 10; //Расстояние от стопа до рынка //--- global parameters int iDistTrail = iTrailDist; //+------------------------------------------------------------------+ void OnTick() { //--- if(iDistTrail<MarketInfo(Symbol(),MODE_STOPLEVEL)) iDistTrail = MarketInfo(Symbol(),MODE_STOPLEVEL); // дальше твой код } //+------------------------------------------------------------------+ void TrailSL() { if(iTrailStart <= 0) return; double sl_lev; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY) { if ((OrderStopLoss() == 0 && Bid > OrderOpenPrice() + iTrailStart * _Point)||(OrderStopLoss() != 0 && Bid > OrderStopLoss() + (iDistTrail+iTrailStep) * _Point)) { sl_lev = NormalizeDouble(Bid - iDistTrail * _Point,Digits); if (OrderModify(OrderTicket(), OrderOpenPrice(), sl_lev, OrderTakeProfit(), 0, clrRed)) Print("Удачная модифиция стоплосс ордера №",OrderTicket()); else Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError()); } } if(OrderType() == OP_SELL) { if ((OrderStopLoss() == 0 && Ask < OrderOpenPrice() - iTrailStart * _Point)||(OrderStopLoss() != 0 && Ask < OrderStopLoss() - (iDistTrail+iTrailStep) * _Point)) { sl_lev = NormalizeDouble(Ask + iDistTrail * _Point,Digits); if (OrderModify(OrderTicket(), OrderOpenPrice(), sl_lev, OrderTakeProfit(), 0, clrRed)) Print("Удачная модифиция стоплосс ордера №",OrderTicket()); else Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError()); } } } } } } //+------------------------------------------------------------------+ Tretyakov Rostyslav 2021.12.15 12:14 #18155 ¿Existe un ENUM para estas constantes o tengo que escribir uno propio? Constante Valor Descripción DRAW_LINE 0 Línea simple SECCIÓN_DRAGADA 1 Segmentos de línea entre valores de línea no vacíos DRAW_HISTOGRAM 2 Histograma DRAW_ARROW 3 Flechas (símbolos) DRAW_ZIGZAG 4 Intervalos entre los valores no vacíos de las líneas pares e impares (zigzag), 2 DRAW_NONE 12 Ningún tipo de dibujo Any questions from newcomers [ARCHIVO] Cualquier pregunta de Preguntas de los principiantes Alexey Viktorov 2021.12.15 12:25 #18156 Tretyakov Rostyslav #:¿Existe un ENUM para estas constantes o tengo que escribir uno propio? Constante Valor Descripción DRAW_LINE 0 Línea simple DRAW_SECTION 1 Segmentos de línea entre valores de línea no vacíos DRAW_HISTOGRAM 2 Histograma DRAW_ARROW 3 Flechas (símbolos) DRAW_ZIGZAG 4 Intervalos entre los valores no vacíos de las líneas pares e impares (zigzag), 2 DRAW_NONE 12 Ningún dibujo Estilos de dibujo ENUM_DRAW_TYPE lo siento mql4 no tiene tal cosa... Tretyakov Rostyslav 2021.12.15 12:30 #18157 Alexey Viktorov #: Estilos de dibujo ENUM_DRAW_TYPE Lo siento, el mql4 no tiene tal cosa... Gracias, escribiré el mío propio) Alexander Avksentyev 2021.12.15 14:23 #18158 Tretyakov Rostyslav #:Así es. Gracias, seguiré indagando y lo averiguaré. Alexander Avksentyev 2021.12.15 15:11 #18159 Tretyakov Rostyslav #:Algo así int Login = 4950287; datetime time = D'2022.01.01 00:00:00'; string name = "Test"; datetime time1 = 0; double TP, lastlot, minlot; int Forder; int TakeProfit,TrailStart,TrailDist,TrailStep,TrailTakeProfit,Step,Slippage; double level_count=0; int iDistTrail = iTrailDist; //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// //Torder-Цена открытия первого ордера //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { if(AccountNumber() != Login) { int close = MessageBox("Неверный номер счёта","Ошибка",MB_OK|MB_ICONSTOP); return(INIT_FAILED); }else (AccountNumber() == Login); { int close = MessageBox("Проверка прошла успешно.Экcперт может приступить к работе.","Инициализация",MB_OK|MB_ICONEXCLAMATION); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// if (TimeCurrent() > time) { int close = MessageBox("Время работы закончилось!!!","Время работы",MB_OK|MB_ICONSTOP); return(INIT_FAILED); }else(TimeCurrent() < time); { int close = MessageBox("Проверка времени работы прошла успешно.Эксперт может приступить к работе!","Время работы",MB_OK|MB_ICONEXCLAMATION); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// TakeProfit =iTakeProfit; TrailStart =iTrailStart; TrailDist =iTrailDist; TrailStep =iTrailStep; TrailTakeProfit =iTrailTakeProfit; Step =iStep; Slippage =iSlippage; //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// if(Digits == 3 || Digits == 5) { TakeProfit *=10; TrailStart *=10; TrailDist *=10; TrailStep *=10; TrailTakeProfit *=10; Step *=10; Slippage *=10; } return(INIT_SUCCEEDED); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// /* Comment( "\n", name, "\n", " ", Symbol(), "\n", "Тайм Фрейм ", Period(), "\n", AccountCompany(), "\n", "\n ", AccountServer(), "\n", "Lots\n", B_S_Lot(), "\n", "Price ", Bid, "\n", "Дата ", TimeToString( TimeCurrent(), TIME_DATE ), "\n", "Server Time ", TimeToString( TimeCurrent(), TIME_SECONDS ), "\n", "Profit ", Profit(), "\n", "AvTP ", CalcTP (), "\n", "Количество ордеров ", CountTrades(), "\n", "\n ", GetVolumeLotLastOrder(), "\n", "\n", "Процент просадки ", NormalizeDouble( (AccountInfoDouble(ACCOUNT_BALANCE)-AccountInfoDouble(ACCOUNT_MARGIN_FREE))/AccountInfoDouble(ACCOUNT_BALANCE)*100,2) );*/ //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// double body = Close[1] - Open[1]; if (CountTrades() == 0 && body > 0) BuyOpen(); // Если нет открытых и сигнал бай if (CountTrades() == 0 && body < 0) SellOpen(); // Если нет открытых и сигнал селл if (CountTrades(0) > 0 && body > 0) BuyOpen(); // Если есть открытые бай и сигнал бай if (CountTrades(1) > 0 && body < 0) SellOpen(); // Если есть открытые селл и сигнал селл /* if (iTrailStart<MarketInfo(Symbol(),MODE_STOPLEVEL)) iTrailStart= MarketInfo(Symbol(), MODE_STOPLEVEL * Point); iTrailSL(); */ if(iDistTrail<MarketInfo(Symbol(),MODE_STOPLEVEL)) iDistTrail = MarketInfo(Symbol(),MODE_STOPLEVEL); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// void BuyOpen() //Открытие позиции Buy { Forder = (OrderSend(_Symbol,OP_BUY,Lot,Ask,iSlippage,0,0,"Коммент",Magic,0,Blue)); if(Forder > 0) { Print("Открыта Позиция BUY"); if(OrderSelect(Forder, SELECT_BY_TICKET)) { TP = NormalizeDouble((Ask+iTakeProfit*_Point),_Digits); if (OrderModify(OrderTicket(),OrderOpenPrice(),0,TP,0)) Print("Ордер Модифицирован BUY "); else Print("Ошибка Модификации Ордера BUY = ",GetLastError()); } } else Print("Ошибка Открытия Позиции BUY"); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// void SellOpen() //Открытие позиции Sell { Forder = (OrderSend(_Symbol,OP_SELL,Lot,Bid,iSlippage,0,0,"Коммент Sell",Magic,0,Red)); if (Forder > 0) { Print("Открыта Позиция SELL"); if(OrderSelect(Forder, SELECT_BY_TICKET)) { TP = NormalizeDouble((Bid-iTakeProfit*_Point),_Digits); if (OrderModify(OrderTicket(),OrderOpenPrice(),0,TP,0)) Print("Ордер Модифицирован SELL "); else Print("Ошибка Модификации Ордера SELL = ",GetLastError()); } } else Print("Ошибка Открытия Позиции SELL"); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// //+------------------------------------------------------------------+ //| Tester function | //+------------------------------------------------------------------+ double OnTester() { //--- double ret=0.0; //--- //--- return(ret); } //+------------------------------------------------------------------+ //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// //+------------------------------------------------------------------+ //| Подсчёт эквити | //+------------------------------------------------------------------+ double Profit(){double count=0; for (int i=OrdersTotal()-1; i>=0; i--){ if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){ if(OrderSymbol() == Symbol() && OrderMagicNumber()==Magic) count+=OrderProfit(); count+=OrderSwap(); } } return(NormalizeDouble(count, 2)); } //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx// void TrailSL() { if(iTrailStart <= 0) return; double sl_lev; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if(OrderType() == OP_BUY) { if ((OrderStopLoss() == 0 && Bid > OrderOpenPrice() + iTrailStart * _Point)||(OrderStopLoss() != 0 && Bid > OrderStopLoss() + (iDistTrail+iTrailStep) * _Point)) { sl_lev = NormalizeDouble(Bid - iDistTrail * _Point,Digits); if (OrderModify(OrderTicket(), OrderOpenPrice(), sl_lev, OrderTakeProfit(), 0, clrRed)) Print("Удачная модифиция стоплосс ордера №",OrderTicket()); else Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError()); } } if(OrderType() == OP_SELL) { if ((OrderStopLoss() == 0 && Ask < OrderOpenPrice() - iTrailStart * _Point)||(OrderStopLoss() != 0 && Ask < OrderStopLoss() - (iDistTrail+iTrailStep) * _Point)) { sl_lev = NormalizeDouble(Ask + iDistTrail * _Point,Digits); if (OrderModify(OrderTicket(), OrderOpenPrice(), sl_lev, OrderTakeProfit(), 0, clrRed)) Print("Удачная модифиция стоплосс ордера №",OrderTicket()); else Print("Не удалось модифицировать стоплосс ордера №",OrderTicket(),". Ошибка: ",GetLastError()); } } } } } } //+------------------------------------------------------------------+ Aquí está el código, tal vez lo he entendido mal, pero no hay ningún efecto. Tretyakov Rostyslav 2021.12.15 15:38 #18160 Alexander Avksentyev #:Aquí está el código, tal vez lo he entendido mal, pero no hay ningún efecto. ¿Qué hay en el cuaderno de bitácora? Publica el código completo, adjúntalo como archivo. 1...180918101811181218131814181518161817181818191820182118221823...1954 Nuevo comentario
Siento haber sido intrusivo.
No es ser intrusivo. Nunca tengas miedo de decir que no sabes algo: pregunta siempre.
Le daré un ejemplo.¿Qué son "iTrailStart" y "iTrailDist"?
¿Qué son "iTrailStart" y "iTrailDist"?
Número de puntos a encender y distancia del mercado a la red de arrastre
iTrailStart = 10; //Número de puntos para habilitar el arrastre;
iTrailDist = 10; //Distancia del stop al mercado;
Si la orden está en el plus por 11 pips, entonces 11-10=1 pips sin pérdida.
Número de puntos a incluir y distancia del mercado al tsl
Más o menos
¿Existe un ENUM para estas constantes o tengo que escribir uno propio?
Constante
Valor
Descripción
DRAW_LINE
0
Línea simple
SECCIÓN_DRAGADA
1
Segmentos de línea entre valores de línea no vacíos
DRAW_HISTOGRAM
2
Histograma
DRAW_ARROW
3
Flechas (símbolos)
DRAW_ZIGZAG
4
Intervalos entre los valores no vacíos de las líneas pares e impares (zigzag), 2
DRAW_NONE
12
Ningún tipo de dibujo
¿Existe un ENUM para estas constantes o tengo que escribir uno propio?
Constante
Valor
Descripción
DRAW_LINE
0
Línea simple
DRAW_SECTION
1
Segmentos de línea entre valores de línea no vacíos
DRAW_HISTOGRAM
2
Histograma
DRAW_ARROW
3
Flechas (símbolos)
DRAW_ZIGZAG
4
Intervalos entre los valores no vacíos de las líneas pares e impares (zigzag), 2
DRAW_NONE
12
Ningún dibujo
ENUM_DRAW_TYPE
Estilos de dibujo
ENUM_DRAW_TYPE
Así es.
Gracias, seguiré indagando y lo averiguaré.
Algo así
Aquí está el código, tal vez lo he entendido mal, pero no hay ningún efecto.
Aquí está el código, tal vez lo he entendido mal, pero no hay ningún efecto.
¿Qué hay en el cuaderno de bitácora?
Publica el código completo, adjúntalo como archivo.