Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 711

 
Artyom Trishkin:

Mais rápido para descobrir e entender

anotar os preços, como tomá-los depois, quando o quê?

void PriceTimePos(string sy="",int op=-1,int mn=-1)
  {
  double Цены[3];
   datetime t;
   bool daa;
   int d,k_=OrdersTotal(),typ_;
   double   r=0;
   int      i,k=OrdersHistoryTotal();

   if(sy=="0") sy=Symbol();
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol())
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(op<0 || OrderType()==op)
                 {
                  if(mn<0 || OrderMagicNumber()==mn)
                    {
                     if(OrderCloseTime()>=TimeCurrent()-2440*60)
                       {
                        t=OrderCloseTime();
                        r=OrderOpenPrice();
                        sl=OrderStopLoss();
                        tp=OrderTakeProfit();
                        lot=OrderLots();
                        typ_=OrderType();
                        Print("OpenPrice",r);
                       Цены[0]=OrderOpenPrice();
                    
                       }
                    }
                 }
              }
           }
        }
     }
//
  }
para inserir neste laço em vez de r
                        daa=false;
                        for(i=0; i<k; i++)
                          {
                           if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
                             {
                              if((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op))
                                {
                                 if(OrderType()>1 && OrderType()<6)
                                   {
                                    d=MarketInfo(OrderSymbol(), MODE_DIGITS);
                                    r=NormalizeDouble(r, d);
                                    if(r==NormalizeDouble(OrderOpenPrice(),d)) daa=true; 
                                   }
                                }
                             }
                          }
 

Olá, eu fiz uma função que deve aumentar a perda de parada após o fechamento da última ordem em posição negativa.

Aumenta-o na etapa definida, até atingir o máximo. Como resultado, ele sempre estabelece o valor original de stop loss.

O que está errado? Obrigado!

//+------------------------------------------------------------------+

duplo SL()

{

sL duplo;

if(OrderHistoryTotal()==0)

{

sL=StopLoss;

}

if(OrderSelect(OrderHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))

{

if(OrderProfit()>=0)

{

sL=StopLoss;

}

if(OrderProfit()<0 && OrderType()==OP_BUY)

{

sL=OrderOpenPrice()-OrderStopLoss()+SLStep;

}

if(OrderProfit()<0 && OrderType()==OP_SELLL)

{

sL=OrderStopLoss()-OrderOpenPrice()+SLStep;

}

}

if(sL>maxStep)

{

sL=StopLoss;

}

retorno(sL);

}

//+------------------------------------------------------------------+

 
Artyom Trishkin:
  1. Você está correto ao retornar valores de funções não vazias, mas é melhor mudar para novos trilhos - não há nada de complicado lá.
  2. Escreva, não esqueça de inserir #propriedade diretriz estrita logo no início do código - onde todas as diretrizes são escritas, leia códigos de erro - suas descrições estão na documentação e tudo estará bem e não será complicado.
Onde posso encontrar os códigos de erro? Onde está essa documentação?
 
#property strict

int Count=0;

void OnInit()     
{
   Alert ("Сработала ф-ия init() при запуске");   // Сообщение
   return;                                                                     // Выход из init()
   }   
//--------------------------------------------------------------------
void OnStart()                                                                       // Спец. ф-ия start()
   {
   double Price = Bid;                                                      // Локальная перемен.
   Count++;                                                                      // Счётчик тиков
   Alert("Новый тик ",Count," Цена = ",Price);       // Сообщение
   return;                                                                        // Выход из start()
   }
void OnDeinit()                                                                              // Спец. ф-ия deinit()
   {
   Alert ("Сработала ф-ия deinit() при выгрузке");         // Сообщение
   return;                                                                                 // Выход из deinit()
   }

O que estou escrevendo errado?

Deve ir assim http://prntscr.com/lu1kb9


Tentei inserir os dados sob o modelo atual

//+------------------------------------------------------------------+
//|                                                            п.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {

   Alert ("Сработала ф-ия init() при запуске");   // Сообщение
                                                                       // Выход из init()
     
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
Alert ("Сработала ф-ия deinit() при выгрузке");         // Сообщение
   return;
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
 
   double Price = PRICE_OPEN;                                                      // Локальная перемен.
   Count++;                                                                      // Счётчик тиков
   Alert("Новый тик ",Count," Цена = ",Price);       // Сообщение
   return;                                                                        // Выход из start()
   
   
  }
//+------------------------------------------------------------------+


Mas ainda não é a mesma coisa. me ajude
Скриншот
Скриншот
  • prnt.sc
Снято с помощью Lightshot
 
Por favor, alguém tem uma função que pode passar um array para calcular o drawdown máximo?
 

Boa tarde.

Estou dominando o emq-el pelo tutorial de Sergei Kovalev.

Fiz o download do Expert Advisor de lá, compilei-o, ele parece até funcionar, mas ao compilá-lo, ele exibe alguns comentários, não erros, mas avisos.

O que devo mudar para compilá-lo sem nenhum erro? Agradecemos antecipadamente.

Arquivos anexados:
expert.mq4  28 kb
 
Sergey Branin:
Onde posso encontrar os códigos de erro? Onde está essa documentação?

No menu deste site - consulte

 
Artyom Trishkin:

No menu deste site - consulte

Artem, há documentação no mql5, e as perguntas estão na seção mql4

Sergey Branin:
Onde posso encontrar os códigos de erro? Onde está essa documentação?

Aqui está a documentação mql4. Você também pode pressionar F1 no MetaEditor

Справочник MQL4
Справочник MQL4
  • docs.mql4.com
MetaQuotes Language 4 (MQL4) - встроенный язык программирования торговых стратегий, разработанный компанией MetaQuotes Software Corp. на основе своего многолетнего опыта в создании торгово-информационных платформ. Этот язык позволяет писать собственные программы-эксперты (Expert Advisors), автоматизирующие управление торговыми процессами и...
 
Alexey Viktorov:

Artyom, a documentação mql5 está lá? e as perguntas estão na seção mql4

uma documentação no mql4. E é melhor pressionar F1 enquanto estiver no MetaEditor

Ahh.... Mesmo assim - também não é tão complicado - é mais rápido colocar o dedo na F1 e encontrar tudo o que você precisa do que esperar 24 horas por uma resposta no fórum. Eu não entendo ...

 
Olá, sou novo em programação. Eu não encontrei nenhum código pronto em nenhum lugar. A idéia é a seguinte - preciso controlar um indicador personalizado de um EA, ou melhor, alterar seus parâmetros externos (um) quando algum evento acontece. A lógica em resumo - se o lote (ou por exemplo o número de posições) > um valor predefinido, o ajuste externo no indicador (que está em outra janela e não está conectado com esta EA) muda na hora sem reinicialização do indicador. Talvez você possa tentar fazer isso através de
 string ServiceCustomIndicatorByIndexA(int nIndex);// я даже не знаю тут   ANSI или UNICODE нужно
и
int ServiceGetNamesIndicatorsMA(int hwndChart,int nWindow,string &asIndicators[],int nSize);   
Não sei como fazê-lo, que qualquer programador escreva um simples bloco de código para um exemplo. c/o Denis



Razão: