Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 189

 
Como é o Metatrader 5 diferente dos 4 anteriores é mais difícil de trabalhar ou não. Cada corretor oferece estes programas, porque não existe um programa para todos os corretores para que não tenha de instalar muitos deles.
Блог полезных и познавательных статей обо всем, на различную тематику категорий, все интересное, что бы Вам хотелось узнать и найти в материалах Интернет сети
Блог полезных и познавательных статей обо всем, на различную тематику категорий, все интересное, что бы Вам хотелось узнать и найти в материалах Интернет сети
  • es-blogy.ru
Если вами соблюдается диета при язве, то это поможет вам избежать частых обострений и свести их к минимуму; а чем меньше обострений, тем меньше количество медикаментозных препаратов вам нужно принимать. Инфекцию Н. pylori можно обнаружить двумя способами: провести анализ крови; анализ желудочного сока. Эндоскопическое или радиологическое...
 
koctik:
Como é o Metatrader 5 diferente dos 4 anteriores é mais difícil de trabalhar ou não. Cada corretor oferece estes programas, porque não existe um programa para todos os corretores para que não tenha de instalar muitos deles.
Descarregue os dois terminais, trabalhe neles em contas de demonstração e descubra por si mesmo.
 

Estou a tentar fazer uma função que devolverá o resultado da última posição fechada (mais ou menos). Esta função foi concebida para um Expert Advisor com várias moedas e deve seleccionar a última posição fechada de todos os pares de moedas, e estou a ter alguns problemas com ela. Pode corrigir a função?

double last_profit()
{  
int dir = 0;
double prof = 0;
ulong d_ticket;

if (HistorySelect(0,TimeCurrent())) 
    {
       int j=HistoryDealsTotal()-1;
       if(j>0)
      {
         d_ticket = HistoryDealGetTicket(j);
         if (d_ticket>0)
         { 
         mydeal.Ticket(d_ticket);          
         prof = mydeal.Profit();
         }
       }
     }
if(prof < 0)dir = -1;
if(prof > 0)dir = 1;
if(prof == 0)dir =0;

return(dir);
} 

 
Automated-Trading:

OBJ_ALL_PERIODS=2097151

Obrigado, mas não funcionou. O problema é que os cálculos dos períodos D1 e...... devem ser exibidos em todos os períodos de tempo, mas não saem a correr como estão. O que fazer?
Arquivos anexados:
macd2.mq5  4 kb
 
Reshetov:

O que quer dizer: métodos não utilizados nas suas aulas? Esta não é a prática no OOP. Um programador OOP normal, ao contrário da programação algorítmica, cria classes com todos os campos e métodos necessários, como se costuma dizer, para todas as ocasiões, porque a mesma classe pode ser mais tarde utilizada noutras aplicações ou tornar-se parte da biblioteca de classes. Para não mencionar o facto de que mesmo dentro de um projecto é melhor criar classes completas, não despojadas, para que não tenha de pesquisar através do código fonte e adicionar mais tarde os campos e métodos necessários.

No OOP qualquer economia, a que muitas pessoas se habituam na programação algorítmica, pode acabar por ser prejudicial mais tarde. Tudo o que não é utilizado deve ser excluído do código pelo compilador e não pelo programador.

Naturalmente, o OOP resulta num código fonte maior em comparação com a programação algorítmica. Mas isto não é uma desvantagem, mas sim uma vantagem, porque muito do código "desnecessário" num determinado projecto pode ser reutilizado noutros projectos.

Não há necessidade de tentar fazer um enigma, ou seja, tudo numa só classe. É necessário criar bibliotecas de classes, ou seja, dividir a funcionalidade em classes separadas e não se esqueça de acrescentar comentários a este feudo, e então tudo estará em ordem. Inicialmente, quando comecei a aprender Java depois de Pascal, também eu tentei fazer tudo numa só peça, ou seja, em vez de usar OOP, criei uma classe com tudo o que precisava para uma determinada tarefa, tal como na programação algorítmica. O resultado foi uma confusão não universal impossível de aplicar mais tarde em qualquer lugar, para não mencionar que era difícil de compreender tal código.

Compreendo tudo isso muito bem. Mas podemos ao menos mostrar-lhe variáveis privadas que não serão utilizadas como é feito no VisualStudio?

A questão é que as aulas são concebidas durante o processo de desenvolvimento. Não se pode simplesmente ter tudo em conta antes da criação. É por isso que são criadas classes de moldura com a menor funcionalidade possível. Enquanto se interage com estas classes de enquadramento, a arquitectura global começa a ser elaborada. Alguns métodos são simplesmente apagados, outros são movidos para a secção privada, e outros são migrados de uma classe para outra. No processo, variáveis esquecidas, métodos e mesmo classes inteiras aparecem inevitavelmente. Isto é normal porque é algo mais como o princípio de Okama em acção - primeiro escrevemos código mau e redundante. Depois formalizamos a tarefa de forma mais clara e algumas das entidades simplesmente desaparecem. A redundância não tem nada a ver. E é neste processo que a ajuda do compilador seria muito útil - ver variáveis não utilizadas e pelo menos métodos privados seriam muito úteis.

 

Olá.

Compreendo que a funçãoOnCalculate() que é utilizada nos indicadores gera por si só, ou seja, sem o evento de alteração de preço ,

Que função pode ser aplicada no indicador que gera apenas quando ocorre um evento de alteração de preço? Obrigado

 
Vikon:

Olá.

Compreendo que a funçãoOnCalculate() que é utilizada nos indicadores gera por si só, ou seja, sem o evento de alteração de preço ,

Que função pode ser aplicada no indicador que gera apenas quando ocorre um evento de alteração de preço? Obrigado

O eventoCalculate é gerado para indicadores imediatamente após o evento Init e a qualquer alteração de dados de preços. É tratado pela funçãoOnCalculate. Quando a história é alterada (quando a história é paginada) este evento também irá gerarOnCalculate.

OOnCalculate é a função mais importante do indicador, em que todos os cálculos do indicador são efectuados em caso de alterações de dados de preços.

 
barabashkakvn:

O eventoCalculate é gerado apenas para indicadores imediatamente após o Init event ser enviado e após qualquer alteração nos dados de preços. Este evento é tratado pela funçãoOnCalculate. O mesmoOnCalculate é gerado quando a história é alterada (quando a história é paginada).

OOnCalculate é a função mais importante do indicador, em que todos os cálculos do indicador são efectuados em caso de alterações de dados de preços.

Aqui tem algum looping, ou seja, gera sempre e quando o período muda, as leituras mudam. O que é o erro?

#property copyright "Copyright 2014, MetaQuotes Software Corp.
#ligação de propriedade "http://www.mql5.com"
#propriedade versão "1.00"
#janela_do_cartão_indicador de propriedade
//+------------------------------------------------------------------+
//| Função de inicialização de indicador personalizado |

int EMA1=12;
int EMA2=26;
int SMA=9;

ENUM_TIMEFRAMES período_macd;
data/hora t_MACD[];
MACD duplo[];
bool high_low=false;
int shift_nachalo;
duplo w_MACD[]; d_MACD[];
int w_MACD_handle,d_MACD_handle;

int barDown=0;
int barUP=0;

//+------------------------------------------------------------------+ return(0);
int OnInit()
{
w_MACD_handle=iMACD(NULL,PERIOD_W1,EMA1,EMA2,SMA,PRICE_CLOSE);
d_MACD_handle=iMACD(NULL,PERIOD_D1,EMA1,EMA2,SMA,PRICE_CLOSE);
ArraySetAsSeries(MACD,true);
ArraySetAsSeries(t_MACD,true);
ArraySetAsSeries(w_MACD,true);
ArraySetAsSeries(d_MACD,true);
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+ MACD_handle=iMACD(NULL,PERIOD_W1,EMA1,EMA1,SMA,PRICE_CLOSE);
//| Função de iteração de indicador personalizada |
//+------------------------------------------------------------------+
int OnCalculate(const const int rates_total,
const int prev_calculado,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{

ObjectosDeleteAll(0,0,-1);
////////////////////////////////////////////////////////
period_macd=PERIOD_D1;
CopyBuffer(d_MACD_handle,0,0,1000,d_MACD);
ArrayCopy(MACD,d_MACD,0,0,WHOLE_ARRAY);
nachalo();
ObjectCreate(0, "lin_2",OBJ_VLINE,0,t_MACD[shift_nachalo],0);
ObjectSetInteger(0, "lin_2",OBJPROP_BACK,true);
ObjectSetInteger(0, "lin_2",OBJPROP_TIMEFRAMES,OBJ_ALL_PERIODS);
ObjectSetInteger(0, "lin_2",OBJPROP_COLOR,clrYellow);
ObjectSetInteger(0, "lin_2",OBJPROP_STYLE,1);
return(rates_total);
}
//+------------------------------------------------------------------+
//////////////////////////////////////////////////////////////////////////////
Nachalo() // começo de uma nova onda
{
duplo baixo_nachalo[],alto_nachalo[];
CopyTime(NULL,period_macd,0,1000,t_MACD);
se (MACD[1]>0)
{high_low=false;
enquanto (MACD[barDown]>0)
{barDown++;}
barUP=barDown;
enquanto (MACD[barUP]<0)
{barUP++;}
CopyLow(NULL,period_macd,0,barUP,low_nachalo);
ArraySetAsSeries(low_nachalo,true);
shift_nachalo=ArrayMinimum(low_nachalo,barDown-1,barUP-(barDown-1));
}
se (MACD[1]<0)
{high_low=true;
enquanto (MACD[barUP]<0)
{barUP++;}
barDown=barUP;
enquanto (MACD[barDown]>0)
{barDown++;}
CopyHigh(NULL,period_macd,0,barDown,high_nachalo);

ArraySetAsSeries(high_nachalo,true);

shift_nachalo=ArrayMaximum(high_nachalo,barUP-1,barDown-(barUP-1));
}}
Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
Arquivos anexados:
macd2.mq5  4 kb
 
Vikon:

É aqui que o loop acontece, ou seja, gera constantemente e quando o período muda, as leituras mudam. O que é o erro?


Como inserir o código correctamente no fórum.

 
Vikon:


Note o erro:

Sem amortecedores indicadores amarrados

Utilização:

//---- превращение динамических массивов в индикаторные буферы
   SetIndexBuffer()
Leia também o artigo"Como escrever um indicador em MQL5".



Razão: