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

 
buyanov:

Mas nada mudou.

Tanto o erro quanto o aviso permanecem.

Dê-me o código INTEGRAL, não apenas um pedaço dele. Você quer que todos adivinhem? Então pergunte aqui - aqui todos sabem tudo sobre tudo de uma vez.

 

Eu lhe dou o código INTEGRAL.

Automated Trading and Strategy Testing
Automated Trading and Strategy Testing
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 
buyanov:

Eu lhe dou o código INTEGRAL.

É simplesmente enorme...

 

Todo o código

"

#property copyright "Copyright 2017, MetaQuotes Software Corp."

#versão da propriedade "Cross20170703 1.00"


//================================================ ========================

extern int Period_FastMA=4;

extern int Period_SlowMA=8;


externo int MaxTickNum=30;

extern int MaxAttempt=10;

externo int k_slippage=1;


extern double k_SL=10.0;//*Point()

extern double k_TP=30.0;//*Point()


extern double TrailDist=30.0;//*Point()

externo duplo k_lots=0,3;

extern bool ExFin=false;



//************************************************ ***** ****************************************


res,

contar,

eu,

PróximoMarque=0,

Tempo,

fintime,

BegMlSecTime,

EndMlSecTime,

deltatime,

Tentar,

deslizamento = 5,

TickNum=0,

posição,

bilhete,

MaxInterval1000,

CrossNum=0,

comis=4,

att,

tentar,



errar;



Duplo //*********************************************** *************************************


total,

grande quantidade,

espalhar,


fastma,

lentoMA,


delta,


último delta,

PrevDelta,


Comis=0,00004,

preço aberto,

fechar preço,

SL,

TP,


lucro,

LUCRO;


bool //************************************************ ***************************************************


FirstCross=falso,

PróximoCross=false,

CurType,

sucesso=verdadeiro

habilitar=verdadeiro,


BegUp,

BegDn,

ComprarAberto=falso,

VendaAberta=false;


fragmento//*********************************************** ***** ********************************************* *


gravando,

str,

registro,

BegTimeCurrent,

EndTimeCurrent,

CurTime,

StrCur,

implorar,

StringEnd;

//************************************************ ************************************************** ***************


//================================================ ================================================ == =============================

//================================================ ================================================ == ==============================

//================================================ ================================================ == ==============================




//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> > >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >> >>>>>>>>>>>>>>>>>>>>>>>>>>

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


//================================================ ================================================ == ===========================


int OnDeinit(const int res)

{

Alert("implor OnDeinit()");

err=StringToInteger((string)err);

retorno(res);

Alert("end OnDeinit()");

}

//OnDeinit();-----------

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




//================================================ ================================================ == ===========================

void ExpertStop()

{

Alert("ExpertStop");

if((ExFin==true)&&(TickNum==MaxTickNum))

{

ExpertRemove();

OnDeinit(res);

}

} //fim do ExpertStop


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



//================================================ ================================================ == =======================

int DescriçãoErro()

{

Alert("pedir ErrorDescription");

mudar (erro)

{ case 0: err="Sem erros"; pausa;

case 1: err="Sem erro, mas resultado desconhecido"; pausa;

caso 2: err="Erro geral"; pausa;

caso 3: err="Parâmetros inválidos"; pausa;

caso 4: err="Servidor de negociação ocupado"; pausa;

caso 5: err="Versão antiga do terminal do cliente"; pausa;

case 6: err="Sem conexão com o servidor de negociação"; pausa;

caso 7: err="Direitos insuficientes"; pausa;

case 8: err="Pedidos muito frequentes"; pausa;

case 9: err="Operação ilegal interrompendo o servidor"; pausa;

caso 64: err="Conta bloqueada"; pausa;

case 65: err="Número de conta incorreto"; pausa;

case 128: err="Tempo limite do negócio expirou"; pausa;

caso 129: err="Preço incorreto"; pausa;

case 130: err="Paradas erradas"; pausa;

caso 131: err="Volume incorreto"; pausa;

caso 132: err="Mercado Fechado"; pausa;

case 133: err="Negociação proibida"; pausa;

case 134: err="Não há dinheiro suficiente para completar a operação"; pausa;

case 135: err="Preço alterado"; pausa;

case 136: err="Sem preços"; pausa;

case 137: err="Corretor ocupado"; pausa;

case 138: err="Novos preços"; pausa;

case 139: err="O pedido está bloqueado e já está sendo processado"; pausa;

case 140: err="Somente compra permitida"; pausa;

case 141: err="Muitos pedidos"; pausa;

case 145: err="A modificação não é permitida porque a ordem está muito próxima do mercado"; pausa;

case 146: err="Subsistema de negociação ocupado"; pausa;

case 147: err="O uso da data de vencimento do pedido é proibido pela corretora"; pausa;

case 148: err="O número de ordens abertas e pendentes atingiu o limite estabelecido pela corretora.";break;

//

case 4000: err="Sem erro"; pausa;

case 4001: err="Ponteiro de função inválido"; pausa;

case 4002: err="Índice do array está fora do intervalo"; pausa;

case 4003: err="Sem memória para pilha de funções"; pausa;

case 4004: err="Erro de pilha após chamada recursiva"; pausa;

case 4005: err="Não há memória na pilha para passar parâmetros"; pausa;

case 4006: err="Sem memória para o parâmetro string"; pausa;

case 4007: err="Sem memória para string temporária"; pausa;

case 4008: err="String não inicializada"; pausa;

case 4009: err="String não inicializada no array"; pausa;

case 4010: err="Sem memória para array de string"; pausa;

case 4011: err="String muito longa"; pausa;

case 4012: err="Resto zero"; pausa;

case 4013: err="Divisão por zero"; pausa;

case 4014: err="Comando desconhecido"; pausa;

case 4015: err="Transição incorreta"; pausa;

case 4016: err="Matriz não inicializada"; pausa;

case 4017: err="Chamadas DLL não permitidas"; pausa;

case 4018: err="Não foi possível carregar a biblioteca"; pausa;

case 4019: err="Não foi possível chamar a função"; pausa;

case 4020: err="Chamadas para funções de bibliotecas externas não são permitidas"; pausa;

case 4021: err="Memória insuficiente para string retornada da função"; pausa;

case 4022: err="Sistema ocupado"; pausa;

case 4050: err="Número inválido de parâmetros de função"; pausa;

case 4051: err="Valor de parâmetro de função inválido"; pausa;

case 4052: err="String function internal error"; pausa;

case 4053: err="Erro de matriz"; pausa;

case 4054: err="Uso incorreto do array timeseries"; pausa;

case 4055: err=" Erro do indicador personalizado "; pausa;

case 4056: err="Arrays são incompatíveis"; pausa;

case 4057: err="Erro ao processar variáveis globais"; pausa;

case 4058: err="Variável global não encontrada"; pausa;

case 4059: err="Função não permitida em modo de teste"; pausa;

case 4060: err="Função não permitida"; pausa;

case 4061: err="Erro ao enviar email"; pausa;

case 4062: err="String parâmetro esperado"; pausa;

case 4063: err="Um parâmetro inteiro é esperado"; pausa;

case 4064: err="duplo esperado"; pausa;

case 4065: err="Um array é esperado como parâmetro"; pausa;

case 4066: err="Dados históricos solicitados em estado de atualização"; pausa;

case 4067: err="Erro ao executar uma operação de negociação"; pausa;

case 4099: err="Fim do arquivo"; pausa;

case 4100: err="Erro ao trabalhar com arquivo"; pausa;

case 4101: err="Nome de arquivo inválido"; pausa;

case 4102: err="Muitos arquivos abertos"; pausa;

case 4103: err="Não foi possível abrir o arquivo"; pausa;

case 4104: err="Modo de acesso a arquivo incompatível"; pausa;

case 4105: err="Nenhum pedido selecionado"; pausa;

case 4106: err="Caractere desconhecido"; pausa;

case 4107: err="Parâmetro de preço incorreto para função de negociação"; pausa;

case 4108: err="Número de bilhete inválido"; pausa;

case 4109: err="A negociação não é permitida. Você deve habilitar a opção Permitir que o EA negocie nas propriedades do EA."; pausa;

case 4110: err="Posições longas não são permitidas. Você precisa verificar as propriedades do EA."; pausa;

case 4111: err="Posições curtas não são permitidas. Você precisa verificar as propriedades do EA."; pausa;

case 4200: err="Objeto já existe"; pausa;

case 4201: err="Uma propriedade de objeto desconhecida foi solicitada"; pausa;

case 4202: err="Objeto não existe"; pausa;

case 4203: err="Tipo de objeto desconhecido"; pausa;

case 4204: err="Nenhum nome de objeto"; pausa;

case 4205: err="Erro de coordenadas do objeto"; pausa;

case 4206: err="A subjanela especificada não foi encontrada"; pausa;

default: err="Erro ao trabalhar com objeto";

}

Alert("fim da descrição do erro");

retorno(erro);

}//End ErrorDescription()

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


//================================================ ================================================ == =======================

int GetNext(NextTick)

//>>>>>>>>>>>>>>>>>>>>>>

{

Alert("implor GetNext(NextTick)");

Alerta(NextTick);

while(RefreshRates()==false)Count++;

Alert("Count=",Count,"NextTick=",NextTick);

Alerta(" ");

Alert(RefreshRates(),Count,NextTick);

return(NextTick);

Alerta(NextTick);

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

Alert("end GetNext(NextTick)");

}

//fim GetNext(NextTick)

//================================================ ================================================ == =======================


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

void OnTick()

{

//************************************

Alert("implorar OnTick");

//************************************

FastMA=NormalizeDouble(iMA(NULL,0,Period_FastMA,0,MODE_SMA,PRICE_CLOSE,1),Digits());//Period_FastMA=4

SlowMA=NormalizeDouble(iMA(NULL,0,Period_SlowMA,0,MODE_SMA,PRICE_CLOSE,1),Digits());//Period_SlowMA=8

GetNext(NextTick);

Alert("NextTick=",NextTick);

Delta=NormalizeDouble(FastMA-SlowMA,Dígitos()); Alert("implorar OnTick");

Alert(Delta,Dígitos());

Alert("FastMA=",DoubleToStr(FastMA ,Digits()),"SlowMA=",DoubleToStr(SlowMA,Digits()), "Delta=",DoubleToStr(Delta,Digits()));

Alert("fim OnTick");

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

}// fim (fim OnTick)

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< <<<<<<<<<<<

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



//================================================ ================================================ == ===========================



void Iniciar()

{

Alerta(" ");

Alert("implor Init()");

Alerta(" ");



StringBeg=StringConcatenate("TimeToStr(TIME_DATE,TIME_SECONDS)=",TimeToStr(TIME_DATE,TIME_SECONDS));

alert(stringbeg);


record=StringConcatenate("MaxTickNum=",MaxTickNum);

alerta(registro);


record=StringConcatenate("k_SL=",DoubleToStr(k_SL,Digits()));

alerta(registro);


record=StringConcatenate("k_TP=",DoubleToStr(k_TP,Digits()));

alerta(registro);


record=StringConcatenate("k_lots=",DoubleToStr(k_lots,Digits()));

alerta(registro);


Alert("end Init()");


}//fim de inicialização()

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




//================================================ ================================================ == ====================

int GetTick(NextTick)


{


Alert("implor GetTick");


while (RefreshRates()==false)

PróximoMarque++;

Alert("NextTick=",NextTick);


OrderSelect(NextTick,SELECT_BY_TICKET);


Lucro=PedidoProfit();


Alert(DoubleToStr(Lucro, Dígitos));


GetNext(NextTick);


Alert("fim GetTick");

}

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


//================================================ ================================================ == =========================


int PróximoTipo()

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("implorar NextType");


if(OrderSelect(NextTick,SELECT_BY_TICKET)==true)

{

OpenPrice=OrderOpenPrice();

ClosePrice=OrderClosePrice();

}


if(ClosePrice>OpenPrice)CurType=OP_BUY;


else CurType=OP_SELL;




return(curType);

Alert("end CurType()");

//>>>>>>>>>>>>>>>>>>>>>>>>

}//"end CurType()";


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



//================================================ ================================================ == ===========================


bool FastMACrossUp()

{


if(!(Delta==LastDelta))Alert("Delta=",DoubleToStr(Delta,5),"LastDelta=",DoubleToStr(LastDelta,5));


Alert("LastDelta=",DoubleToStr(LastDelta,5));

Alert("!(Delta==LastDelta)=",!(Delta==LastDelta));

if(((Delta!=LastDelta) && (Delta>=0) && (LastDelta<=0)))Alert("(Delta!=LastDelta)&&(Delta>=0)&&(LastDelta<=0)= " ,

(Delta!=ÚltimoDelta) && (Delta>=0) && (ÚltimoDelta<=0));

Alert("(Delta>=0)=",(Delta>=0),"(ÚltimoDelta<=0)=",(ÚltimoDelta<=0));

if(Delta!=LastDelta)Alert("Delta=",DoubleToStr(Delta,5)," LastDelta=",DoubleToStr(LastDelta,5));

Alert("(Delta>=0)=",(Delta>=0)," (LastDelta<=0)=",(LastDelta<=0)," TickNum=",TickNum);

Alert("(Delta>=0)=",(Delta>=0));

Alert("ÚltimoDelta<=",(ÚltimoDelta<=0));

Alert("!(Delta==LastDelta)&&((Delta>=0)&&(LastDelta<=0))=",!(Delta==LastDelta)&&((Delta>=0)&&(LastDelta<=0 )));

Alert(((Delta!=LastDelta)&&((Delta>=0)&&(LastDelta<=0))));

Alert(" (Delta!=LastDelta)= ",(Delta!=LastDelta)," (Delta>=0)= ",(Delta>=0)," (LastDelta<=0)= ",(LastDelta<= 0));

return((Delta!=LastDelta)&&(Delta>=0)&&(LastDelta<=0));

} //fim do FastMACrossUp()

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



//================================================ ================================================ == ===================

bool FastMACrossDn()

{

if(!(Delta==LastDelta)&&(Delta<=0)&&(LastDelta>=0))Alert("Delta=",DoubleToStr(Delta,5)," LastDelta=",DoubleToStr(LastDelta,5)) ;


Alert("LastDelta=",DoubleToStr(LastDelta,5));

Alert("!(Delta==LastDelta)=",!(Delta==LastDelta));

Alert("(Delta<=0)=",(Delta<=0));

Alert("ÚltimoDelta>=0",(ÚltimoDelta>=0));

if((Delta!=ÚltimoDelta) && (Delta<=0) && (ÚltimoDelta>=0))

Alert("(Delta<=0)=",(Delta<=0),"(ÚltimoDelta>=0)=",(ÚltimoDelta>=0));

Alert(" (Delta!=LastDelta)&&((Delta<=0)&&(LastDelta>=0))= ",(Delta!=LastDelta) && (Delta<=0) && (LastDelta>=0));

if(Delta!=LastDelta)Alert(" Delta=",DoubleToStr(Delta,5)," LastDelta=",DoubleToStr(LastDelta,5));

Alert("(Delta<=0)=",(Delta<=0)," (LastDelta>=0)=",(LastDelta>=0)," TickNum=",TickNum);

Alert(" (Delta!=LastDelta)&&(( Delta<=0)&&(LastDelta>=0))= ",(Delta!=LastDelta)&&((Delta<=0)&&(LastDelta>=0)) );

return((Delta!=LastDelta)&&(Delta<=0)&&(LastDelta>=0));

}//fim FastMACrossDn()

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



//================================================ ================================================ == ==================================

bool FastMAIsAcima()

{

Alert("implor FastMAIsAbove()");

Alert(" (Delta>=0)=",(Delta>=0)," (ÚltimoDelta>=0)=",(ÚltimoDelta>=0));

if(((Delta>=0)&&(ÚltimoDelta>=0)))

Alert(" FastMA= ",DoubleToStr(FastMA,5)," SlowMA= ",DoubleToStr(SlowMA,5));

Alert(" Delta= ",DoubleToStr(Delta,5)," LastDelta= ",DoubleToStr(LastDelta,5));

Alert("end FastMAIsAbove()");

Alert("(Delta==LastDelta)&&(Delta>=0)&&(LastDelta>=0)=",(Delta==LastDelta)&&(Delta>=0)&&(LastDelta>=0));

Alert("end FastMAIsAbove()");

return((Delta==LastDelta)&&(Delta>=0)&&(LastDelta>=0));

}//fim FastMAIsAbove()

//================================================ ================================================ == =================


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

bool FastMAIsBelow()

{


return((Delta==LastDelta)&&(Delta<=0)&&(LastDelta<=0));

}//fim FastMAIsBelow()*/

"

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

//************************************************ ******************************************

"


 
Dmitriy Voevodkin:

O Init não pode ser iniciado de forma alguma, ele é automaticamente iniciado uma vez quando o indicador/especialista é iniciado, o mesmo que o DeInit.

Alternativamente, você pode fazer uma variável booleana estática e usá-la em conjunto comIsConnected(). E quando a conexão é restaurada na chegada de um novo tick, ela deve ser lançada primeiro, alguma função de inicialização própria. MasIsConnected() não deve ser usado em OnCalculate(), mas em OnTimer() e minha própria função de inicialização deve ser usada logo no início de OnCalculate().


Obrigado, vou pensar nisso, só pensei que já existem soluções típicas......

 
buyanov:

Todos os códigos

Uau, isso é um monte de alertas.
 
Mihail Marchukajtes:

Obrigado, vou pensar nisso, apenas pensei que já existiam soluções típicas disponíveis......

Eu já escrevi uma refutação às palavras desta pessoa. OnItit() é uma função comum. Execute-o quando for necessário.

 
buyanov:

Todos os códigos


Eu já lhe disse - anexe o código usando o botão SRC. Desculpe, você está completamente desaprendido?

Diga-me, quem gostaria de olhar para este pedaço de lixo?

 
Artyom Trishkin:

Eu já escrevi a refutação das palavras deste homem. OnItit() é uma função usual. Você pode executá-lo quando precisar.


Bem, sim, eu estava me perguntando por que não chamá-lo quando você se conectar. Acontece que você pode :-)

 
buyanov:

Todos os códigos


Cuidado com os tipos variáveis.

Jogue fora todos os alertas desnecessários

Arquivos anexados:
test.mq4  42 kb