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

 
Alexey Viktorov:

Está tudo bem se diz

nada, o fio é para o MT4, então você não presta atenção a ele

OK, ocupa-te, aqui é chato

 

Saudações a todos. Boa sorte na vida e lucro no trabalho.

Estou pedindo ajuda (inesperadamente, huh? :) ).

Em Mql eu sou um zerobom, 2 dias "no assunto". Se a EA real me força a usar o comércio automático, estou tentando escrever (coletar em tempo real de diferentes partes) coruja para minha EA plana e, claro, estou ficando confuso :). Estou tentando resolver outro problema há cerca de 10 horas e ainda não cheguei a ele. Se o conselho de alguém ou um exemplo for extremamente grato (verbalmente e por escrito, e o mais importante no chuveiro).

Em geral... Há o TC, utilizado com sucesso por mim há muito tempo. Em condições comerciais no mesmo instrumento podem as ordens de mercado multidirecionais (sem pendentes). Para a posição rebaixada pode ser preenchido em um sinal comercial, desde que a posição tenha caído pelo menos X pips, às vezes acontece e faz uma adição ao preenchimento (sob as mesmas condições (sinal comercial + tamanho do drawdown)). O problema (atual) está em abrir posições adicionais, a saber... como verificar e devolver o valor da perda em uma posição longa. Seguindo o exemplode https://www.mql5.com/ru/forum/117061, eu ajustei o código para atribuir a cada posição sua própria Magik, mas isso é tudo. Como selecionar exatamente uma posição que tenha se sentado e devolver seu valor de perda.... :(.

código "meu" para abrir negócios.

//-----------------

if (NumberOfPositions(Symbol(),OP_BUY, Magic)<1)

{

se (minhas condições de entrada)

{

if (takeprofit!=0) TP = NormalizeDouble(Ask + takeprofit*Point,Digits); caso contrário TP = 0;

if (stoploss!=0) SL = NormalizeDouble(Bid - stoploss*Point,Digits); caso contrário SL = 0;

ticket=OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),5,SL,TP, "BUY",Magic,0,Blue);

if(ticket < 0) { Imprimir("Erro ao abrir ordem de compra #", GetLastError());}

}}

if(NumberOfPositions(Symbol(),OP_SELL, Magic)<1)

{

se (minhas condições de entrada)

{

if (takeprofit!=0) TP = NormalizeDouble(Bid - takeprofit*Point,Digits); caso contrário TP = 0;

if (stoploss!=0) SL = NormalizeDouble(Ask + stoploss*Point,Digits); caso contrário SL = 0;

ticket=OrderSend(Symbol(),OP_SELLL,LOT,NormalizeDouble(Bid,Digits),5,SL,TP, "SELL",Magic,0,Red);

if(ticket < 0) { Imprimir("Erro ao abrir ordem de venda #", GetLastError());}

}}

//---------------

Ordens adicionais estão planejadas para serem abertas usando o seguinte código

//---------------

if (NumberOfPositions(Symbol(),OP_BUY, Magic)===1 && NumberOfPositions(Symbol(),OP_BUY, Magic_2)<1)

{

if (minhas condições de entrada && GetProfitOpenPosInPoint(Symbol(),OP_BUY,Magic)>= LEVEL_1)

{

ticket=OrderSend(Symbol(),OP_BUY,LOT,NormalizeDouble(Ask,Digits),5,SL,TP, "Extra Buy",Magic_2,0,Blue);

if(ticket < 0) { Imprimir("Erro abrindo ordem de compra #", GetLastError()); }

} }

//---------------

E foi aí que eu fiquei preso :). O que usar ao invés de GetProfitOpenPosInPoint(Symbol(),OP_BUY,Magic). Acho que preciso usar o Drawdown_level(Symbol(),OP_BUY,Magic) mas como obtê-lo...

Ajude POR FAVOR, seja amigo.
Z.U. Se você aconselhar, por favor tenha em mente que eu ainda sou nubyara que não sou muito preguiçoso para me enviar um pouco mais de detalhe, sabe, como se: FOREST THERE, então não se esqueça de especificar a direção <------ || ------>>.

Obrigado por sua atenção :).

код----доливаем по тренду
код----доливаем по тренду
  • 2009.05.07
  • www.mql5.com
Я пытался написать советник с открытием дополнительных лотов по тренду. Суть заключается вот в чем...
 
Igor Makanu:

Nada, o fio é para o MT4, portanto você não presta atenção a ele.

Ok, ocupa-te, é chato aqui

Diga-me onde fica uma filial semelhante para o MT5, vou perguntar lá...

 
Alexander Layzerevich:

Diga-me onde está um fio semelhante para o MT5, vou perguntar lá...

Pergunte aqui. Aqui para os dois idiomas.
 
Alexey Viktorov:

É possível especificar

A função destacada não é diferente da declaração da função. Acontece que a função é declarada nos parâmetros de entrada da função.

No MT4 a chamada de função do Indicador vai sem erros e funciona conforme necessário(int handle=iEnvelopes(Symbol(), tf, period, method, shift, price, Deviation(kanal), buff);) Pensei que poderia ser a mesma coisa no MT5.

Por favor, informe como fazê-lo corretamente ?

 
Alexander Layzerevich:

No MT4 a chamada de função do Indicador vai sem erros e funciona conforme necessário(int handle=iEnvelopes(Symbol(), tf, period, method, shift, price, Deviation(kanal), buff);) Pensei que poderia ser a mesma coisa no MT5.

Você pode me dizer como fazer isso corretamente?

É impossível obter dados de Envelopes em mql4
 
Artyom Trishkin:
Portanto, é impossível obter dados de Envelopes em mql4

Aqui está o código do MT4

//-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора";// Настройки Индикатора

extern ENUM_TIME_FRAMES   TimeFrames     = 5;                     // Временной период
//-------------------------------------------------------------------
       int                Ma_Period     = 120;                   // Период
       ENUM_MA_METHOD     Ma_Method     = 2;                     // Mетод усреднения
       int                Ma_Shift      = 0;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = 0;                     // Tип цены
//************************************************************************************************/

int OnInit()
{
double Signal_Buy = iEnvelopes(Symbol(), TimeFrames, Ma_Period, Ma_Method, Ma_Shift, Applied_Price, Deviation(TimeFrames, Kanal), 2, 0); // Сигнал на Покупку
}
//+------------------------------------------------------------------+
double Deviation(int Time_Frames, int _Kanal)
{

int Simbol = SymbolMagic();
//-------------------------
if (Time_Frames == 0) Time_Frames = Period();

if (Time_Frames == 1)
   {
   if (_Kanal == 1)
      {
      switch (Simbol)
         {
         ...
         }
      }
   }
}
//+------------------------------------------------------------------+

Tudo funciona perfeitamente. Eu gostaria do mesmo em MT5

 
Alexander Layzerevich:

Aqui está o código do MT4

Tudo funciona perfeitamente. Eu gostaria do mesmo em MT5

Bem, isso é porque é um código diferente e vai funcionar.
 
Artyom Trishkin:
Bem, isso porque é um código diferente e funcionará.

Corrigido o código MT5 para enviar dados para o Indicador:

//-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора";// Настройки Индикатора

extern ENUM_TIMEFRAMES    TimeFrames    = PERIOD_M5;             // Временной период
//-------------------------------------------------------------------
       int                Ma_Period     = 120;                   // Период
       ENUM_MA_METHOD     Ma_Method     = MODE_SMMA;             // Mетод усреднения
       int                Ma_Shift      = 0;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = PRICE_CLOSE;           // Tип цены
//************************************************************************************************/
void OnTick()
{
double Signal_Buy = (int)Envelopes(Symbol(), TimeFrames, Ma_Period, Ma_Shift, Ma_Method, Applied_Price, 2,  Deviation(1)); // Сигнал на Покупку
}
//************************************************************************************************/
double Envelopes(string symb, ENUM_TIMEFRAMES tf, int period, int shift, int method, int price, int buff, double Deviation(int kanal))
{
  double buf[1];
  int handle=iEnvelopes(Symbol(), tf, period, shift, method, price, Deviation(kanal));
   if(handle<0)
   {
    Print("Failed to create handle ATR, Error: ",GetLastError());
    return(WRONG_VALUE);
   } else
   {
    if(CopyBuffer(handle,buff,0,1,buf)<0)
    {
     Print("Failed to copy data from the indicator ATR, Error: ",GetLastError());
     return(WRONG_VALUE);
    }
   }
   return(buf[0]);
}
//************************************************************************************************/

Mas o erro é o mesmo.

 
Alexander Layzerevich:

Aqui está o código do MT4

//-------------------------------------------------------------------
extern string Parametrs_Indicator       = "Настройки Индикатора";// Настройки Индикатора

extern ENUM_TIME_FRAMES   TimeFrames     = 5;                     // Временной период
//-------------------------------------------------------------------
       int                Ma_Period     = 120;                   // Период
       ENUM_MA_METHOD     Ma_Method     = 2;                     // Mетод усреднения
       int                Ma_Shift      = 0;                     // Cдвиг средней
       ENUM_APPLIED_PRICE Applied_Price = 0;                     // Tип цены
//************************************************************************************************/

int OnInit()
{
double Signal_Buy = iEnvelopes(Symbol(), TimeFrames, Ma_Period, Ma_Method, Ma_Shift, Applied_Price, Deviation(TimeFrames, Kanal), 2, 0); // Сигнал на Покупку
}
//+------------------------------------------------------------------+
double Deviation(int Time_Frames, int _Kanal)
{

int Simbol = SymbolMagic();
//-------------------------
if (Time_Frames == 0) Time_Frames = Period();

if (Time_Frames == 1)
   {
   if (_Kanal == 1)
      {
      switch (Simbol)
         {
         ...
         }
      }
   }
}
//+------------------------------------------------------------------+

Tudo funciona perfeitamente. Eu gostaria do mesmo em MT5

Cuidado com suas mãos:

Em meu post anterior, isto está destacado em seu código

double Deviation(int Time_Frames, int _Kanal)

e, no código desta, a mensagem citada é uma declaração de função. Também destacado.

E isto

Deviation(TimeFrames, Kanal)

Chamando uma função do usuário que existe. Embora este método de programação seja inaceitável para mim, ele ainda é compreensível. Mas como descrever o erro nesse código, estou perdido.

Razão: