Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 58

 
Eu mesmo quero aprender a escrever código... Por isso, pensei em pedir alguns conselhos. Pensei que talvez alguém pudesse me dar uma amostra... Obrigado!
 
Stafort:
Eu mesmo quero aprender a escrever código... Por isso, pensei em pedir alguns conselhos. Pensei que talvez alguém pudesse me dar uma amostra... Obrigado!
Aqui você tem um monte de amostras, coleta as mais adequadas e tem edições para atender suas necessidades. Se não puder, você pode sempre fazer perguntas neste fórum, e obter respostas.
 
O cliente reclama que o Expert Advisor continua abrindo negócios mesmo que tenha sido removido do quadro. Este não pode ser o caso, certo?
E se você não o remover da tabela e apenas fechar a janela EA, será que vai funcionar?
Obrigado.
 
Vladimir Tkach:
O cliente reclama que o Expert Advisor continua abrindo negócios mesmo que tenha sido removido do quadro. Este não pode ser o caso, certo?
E se você não o remover da tabela e simplesmente fechar a janela do Expert Advisor, ele vai funcionar?
Obrigado.

Se apagado e escrito corretamente, não deve. Descarga com código de desinicialização - 1. Se o Consultor Especialista faz loops... Temos que lidar com isso...

Se você fechar a janela do EA, o EA será descarregado com o código de desinicialização - 4:

RAZÃO_CHARTCLOSE

4

O quadro está fechado


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

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Причины деинициализации - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
MONTE_CRISTO:
Bem, isso mesmo, há citações metaquotadas, como eu me lembro, e os textos são de boa qualidade.
Se você abrir uma conta em uma corretora na MT5, as cotações serão "não rasgadas", qual é a pergunta? Eu nunca aprendi a prepará-los, enquanto que com o MT5 é mais fácil e rápido de exportar.
 
Sergey Gritsay:
Ao menos uma captura de tela para entender quais linhas você quer fundir
Sergey Gritsay:
Pelo menos uma captura de tela para entender quais filas você quer fundir.
Sergey Gritsay:
Pelo menos uma captura de tela para entender que tipo de linhas você quer combinar. Obrigado por sua resposta! Quero unir duas linhas de ferramentas superiores em uma no MT4.
 

O que poderia significar a cor vermelha da variável dT?


 
Andrei:

O que poderia significar a cor vermelha da variável dT?


é declarada como uma variável de entrada "externa".
 
Pessoal, uma dica. TestGenerator dá erro: 2017.02.08 18:24:43.751 TestGenerator: erro de dados incomparável (valor baixo 1.09860 em 2016.07.27 19:30 não é alcançado a partir do menor período de tempo, preço baixo 1.09880 desajustes)
O que isso significa e como pode ser corrigido? O que eu fiz de errado?
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:
Pessoal, uma dica. TestGenerator dá erro: 2017.02.08 18:24:43.751 TestGenerator: erro de dados incomparável (valor baixo 1.09860 em 2016.07.27 19:30 não é alcançado a partir do menor período de tempo, preço baixo 1.09880 desajustes)
O que isso significa e como pode ser corrigido? O que eu fiz de errado?
São as citações, elas são de má qualidade.