Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 58

 
Quiero aprender a escribir código yo mismo... Así que pensé en pedir algún consejo. Pensé que tal vez alguien podría darme una muestra... ¡Gracias!
 
Stafort:
Quiero aprender a escribir código yo mismo... Así que pensé en pedir algún consejo. Pensé que tal vez alguien podría darme una muestra... ¡Gracias!
Aquí tienes un montón de muestras, elige la más adecuada, y tiene ediciones que se adaptan a tus necesidades. Si no puedes, siempre puedes preguntar en este foro, y obtener respuestas.
 
El cliente se queja de que el Asesor Experto sigue abriendo operaciones aunque se haya eliminado del gráfico. Esto no puede ser así, ¿verdad?
Y si no lo quitas del gráfico y sólo cierras la ventana del Asesor Experto, ¿funcionará?
Gracias.
 
Vladimir Tkach:
El cliente se queja de que el Asesor Experto sigue abriendo operaciones aunque se haya eliminado del gráfico. Este no puede ser el caso, ¿verdad?
Y si no lo quitas del gráfico y sólo cierras la ventana del Asesor Experto, ¿funcionará?
Gracias.

Si se borra y se escribe correctamente, no debería. Descarga con código de desinicialización - 1. Si el Asesor Experto se engancha... Tenemos que lidiar con ello...

Si cierra la ventana del EA, éste se descargará con el código de desinicialización - 4:

REASON_CHARTCLOSE

4

El gráfico está cerrado


https://www.mql5.com/ru/docs/constants/namedconstants/uninit

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
MONTE_CRISTO:
Bueno, es cierto, hay citas de metacitas allí, por lo que recuerdo, y Tickstory es de buena calidad.
Si abres una cuenta en una empresa de corretaje con MT5, las cotizaciones serán "no rasgadas", ¿cuál es la cuestión? Nunca he aprendido a prepararlos, mientras que con MT5 es más fácil y rápido exportar.
 
Sergey Gritsay:
Al menos una captura de pantalla para entender qué filas quieres fusionar
Sergey Gritsay:
Al menos una captura de pantalla para entender qué filas quieres fusionar.
Sergey Gritsay:
Al menos una captura de pantalla para entender qué tipo de líneas quieres combinar. Gracias por su respuesta. Quiero unir dos filas de herramientas superiores en una sola en MT4.
 

¿Qué puede significar el color rojo de la variable dT?


 
Andrei:

¿Qué puede significar el color rojo de la variable dT?


se declara como una variable de entrada "externa".
 
Amigos, una pista. Tester da error: 2017.02.08 18:24:43.751 TestGenerator: error de datos no coincidentes (el valor bajo 1.09860 en 2016.07.27 19:30 no se alcanza desde el marco temporal más bajo, el precio bajo 1.09880 no coincide)
¿Qué significa esto y cómo se puede solucionar? ¿Qué he hecho mal?
double Margin_Percent=AccountFreeMargin()*Percent/100; //Используемые средства для открытия ордеров
double Lots=Margin_Percent/MarketInfo(Symbol(),MODE_MARGINREQUIRED);//Определение общего количества лотов
double Lots_Volume=(MathFloor(Lots)+MarketInfo(Symbol(),MODE_LOTSTEP));
double MacdCurrent=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_CLOSE,MODE_MAIN,1); //Параметры MACD основной линии текущего бара
double MacdPrevious1=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_CLOSE,MODE_MAIN,2);//Параметры MACD основной линии предыдущего бара
double MacdPrevious2=iMACD(NULL,0,Fast_EMA_Period,Slow_EMA_Period,Signal_Period,PRICE_CLOSE,MODE_MAIN,3);//Параметры MACD основной линии со смещением на 2 бара
double StopLoss=iSAR(NULL,0,Step_PSAR,Maximum_PSAR,0);//Параметры Трейлинг стоп по параметрам ParabolicSAR текущего бара
double Previous_StopLoss=iSAR(NULL,0,Step_PSAR,Maximum_PSAR,1);//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
double CurrentPSAR=iSAR(NULL,0,Step_PSAR,Maximum_PSAR,1);//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   static datetime New_Time=TimeCurrent();// Время текущего бара
   bool New_Bar=false;                    // Флаг нового бара
   int ticket,total,cnt;
//---------------------------------------------------------------------------
   total=OrdersTotal();// Опредление количства ордеров
   if(total<1)
     {
      //--- нет открытых ордеров
      if(Margin_Percent<MarketInfo(Symbol(),MODE_MARGINREQUIRED)*(MarketInfo(Symbol(),MODE_MINLOT)))
         //Проверка на наличие денежных средств для открытия минимального лота
        {
         Print("Не хватает средств. Свободные средства = ",AccountFreeMargin());
         return;
        }
      if(Time[0]==New_Time) // Сравниваем время
        {
         New_Bar=true;      // Поймался новый бар
         if(New_Bar==false)    // Если бар не новый..
            return;            // ..то уходим  
        }
      //Определение количества лотов
      if(Lots>Lots_Volume)
         Lots=Lots_Volume;
      else if(Lots<Lots_Volume)
         Lots=MathFloor(Lots);
      return;
      //--- условие для открытия длинной позиции (BUY)
      if(CurrentPSAR<iOpen(NULL,0,1) &&
         ((MacdPrevious1>0 && MacdPrevious2<0) ||
         (MacdCurrent>0 && MacdPrevious1<0) ||
         (MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2<0)||
         (MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2==0)))
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Green);
         if(ticket>0)//проверка отрытия позиции
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
               Print("BUY ордер открыт : ",OrderOpenPrice());
            else Print("Ошибка открытия ордера BUY : ",GetLastError());
            return;
           }
        }
      //--- условие для открытия короткой позиции (SELL)
      if(CurrentPSAR>iOpen(NULL,0,1) &&
         ((MacdCurrent<0 && MacdPrevious1>0) ||
         (MacdPrevious1<0 && MacdPrevious2>0) ||
         (MacdCurrent<0 && MacdPrevious1<0 && MacdPrevious2>0) ||
         (MacdCurrent<0 && MacdPrevious1==0 && MacdPrevious2==0)))
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Red);
         if(ticket>0)//проверка открытия позиции
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
               Print("SELL ордер открыт : ",OrderOpenPrice());
            else Print("Ошибка открытия ордера SELL : ",GetLastError());
            return;
           }
        }
      return; //--- выход из блока "нет открытых ордеров"
     }
//--- важно правильно войти в рынок, но более важно правильно из него выйти  
   for(cnt=0;cnt<total;cnt++)
     {
      if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
         continue;
      if(OrderMagicNumber()==MAGICNUMBER && // проверка магического номера ордера
         OrderSymbol()==Symbol()) // проверка символа ордера
        {
         //--- длинная позиция открыта
         if(OrderType()==OP_BUY)
           {
            //--- должен быть закрыт?
            if(CurrentPSAR>iOpen(NULL,0,1) &&
               ((MacdCurrent<0 && MacdPrevious1>0) ||
               (MacdPrevious1<0 && MacdPrevious2>0) ||
               (MacdCurrent<0 && MacdPrevious1<0 && MacdPrevious2>0) ||
               (MacdCurrent<0 && MacdPrevious1==0 && MacdPrevious2==0)))
              {
               //--- закрытие ордера и выход
               if(OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
                 {
                  Print("Ордер закрыт");
                  ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,StopLoss-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Red);
                  if(ticket>0)//проверка открытия позиции
                    {
                     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
                        Print("SELL ордер открыт : ",OrderOpenPrice());
                     else Print("Ошибка открытия ордера SELL : ",GetLastError());
                     return;
                    }
                 }
              else Print("Ошибка закрытия ордера ",GetLastError());

              }
            //------------------Модификация ордера по СтопЛоссу
            else if(StopLoss>Previous_StopLoss && StopLoss<iOpen(NULL,0,0))
              {
               if(OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,0,Blue))
                  Print("Цена Stop Loss ордера успешно модифицирована.");
               else Print("Ошибка модификации ордера. Код ошибки=",GetLastError());
               return;
              }
            return;
           }
         // идём на короткую позицию
         else if(OrderType()==OP_SELL)
           {
            //--- должен быть закрыт?
            if(CurrentPSAR<iOpen(NULL,0,1) &&
               ((MacdPrevious1>0 && MacdPrevious2<0) ||
               (MacdCurrent>0 && MacdPrevious1<0) ||
               (MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2<0)||
               (MacdCurrent>0 && MacdPrevious1==0 && MacdPrevious2==0)))
              {
               //--- закрытие ордера и выход
               if(OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
                 {
                  Print("Ордер закрыт");
                  ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,StopLoss+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,NULL,MAGICNUMBER,0,Green);
                  if(ticket>0)//проверка отрытия позиции
                    {
                     if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
                        Print("BUY ордер открыт : ",OrderOpenPrice());
                     else Print("Ошибка открытия ордера BUY : ",GetLastError());
                     return;
                    }
                 }
               else Print("Ошибка закрытия ордера ",GetLastError());
              }
            //-----------------Модификация ордера по СтопЛоссу            
            else if(StopLoss<Previous_StopLoss && StopLoss>iOpen(NULL,0,0))
              {
               if(OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point,0,0,Blue))
                  Print("Цена Stop Loss ордера успешно модифицирована.");
               else Print("Ошибка модификации ордера. Код ошибки=",GetLastError());
               return;
              }
           }
        }
     }
//------
  }
//-------------------------------------------------------------------------------------------------------
 
Michail_David:
Amigos, una pista. Tester da error: 2017.02.08 18:24:43.751 TestGenerator: error de datos no coincidentes (el valor bajo 1.09860 en 2016.07.27 19:30 no se alcanza desde el marco temporal más bajo, el precio bajo 1.09880 no coincide)
¿Qué significa esto y cómo se puede solucionar? ¿Qué he hecho mal?
Son las citas, son de mala calidad.