Resposta

Vamos compartilhar as funções MQL4 personalizadas do SQ aqui!

10 respostas

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Perfil da visita

8 anos atrás #114883

Olá, colegas usuários do SQ,

como poucos de nós vêm da perspectiva de programação MQL4, temos nossas próprias ideias de como melhorar as funcionalidades MQL4 do SQ original,

Então, eu queria compartilhar alguns dos meus "complementos" que implementei nos arquivos MQL4 originais da SQ.

Além disso, quero que todos os que tiveram seus arquivos MQL4 do SQ modificados de alguma forma compartilhem suas modificações aqui com todos também 🙂.

 

Vou começar compartilhando algumas das minhas... divirta-se!

 

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

¢ BACKTEST MUITO MAIS RÁPIDO AO USAR O MT4 (SEM MODO VISUAL):

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Abra o arquivo "Main.tpl" e insira a seguinte linha de código em algum lugar abaixo de "int start() {" e acima de "drawStats();":

if(IsTesting()&&IsVisualMode()==false){ObjectsDeleteAll();} /Exclui todos os objetos para acelerar o backtesting do MT4...

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

 

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

¢ LIMITADOR DE PROPAGAÇÃO:

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Procure por "MaxSlippage = 3;" no arquivo "PrintParameters.inc" e, em seguida, insira a seguinte linha de código abaixo dessa linha:

extern double MaxSpread = 1.5; // << insira seu spread máximo em PIPs aqui

Procure por "void openPosition" no arquivo "MT4Functions.inc" e, em seguida, em "if(sqIsTradeAllowed() == 1) {", insira o seguinte trecho de código:

         string OrderTypeString;
         if(orderType==OP_BUY) OrderTypeString="#BUY";
         if(orderType==OP_SELL) OrderTypeString="#SELL";
         if(orderType==OP_BUYLIMIT) OrderTypeString="#BUY_LIMIT";
         if(orderType==OP_SELLLIMIT) OrderTypeString="#SELL_LIMIT";
         if(orderType==OP_BUYSTOP) OrderTypeString="#BUY_STOP";
         if(orderType==OP_SELLSTOP) OrderTypeString="#SELL_STOP";
         //
         int orderStartPointInTime = GetTickCount();
         if(orderType==OP_BUY||orderType==OP_SELL){if(DoubleToStr((Ask - Bid)*gPointPow, 1)>DoubleToStr(MaxSpread, 1)){Log("#ERROR! O spread da ordem ("+OrderTypeString+") era muito alto, - (Current Spread: ("+DoubleToStr((Ask - Bid)*gPointPow, 1)+")>("+DoubleToStr(MaxSpread, 1)+" Maximum), Delayed.");Sleep(500);return(0);}}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

 

 

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

¢ Determinar se a ordem foi fechada por Stoploss/Takeprofit LOG NOTIFIER:

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

Abra o arquivo "Main.tpl" e insira a seguinte linha de código em algum lugar abaixo de "int start() {" e acima de "drawStats();":

Order_Closure_OfSLTP_Notifier();

Abra seu arquivo "CustomCodeMT4,mq4" e insira o seguinte trecho de código em algum lugar abaixo do restante do código existente que já está lá..:

void Order_Closure_OfSLTP_Notifier()
{
   for(int i=OrdersHistoryTotal()-1;i>=0;i--){
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true&&OrderSymbol()==Symbol()){
   se(OrderMagicNumber()==MagicNumber){
   if(TimeCurrent()-OrderCloseTime()==0) //<=OrderTakeProfit()){Log("#Order: ("+OrderTypeString+" [Ticket: "+OrderTicket()+"]) was Closed By TP.");}
            if(OrderType()==OP_BUY&&OrderClosePrice()<=OrderStopLoss()){Log("#Order: ("+OrderTypeString+" [Ticket: "+OrderTicket()+"]) was Closed By SL.");}
            //
            if(OrderType()==OP_SELL&&OrderClosePrice()=OrderStopLoss()){Log("#Order: ("+OrderTypeString+" [Ticket: "+OrderTicket()+"]) was Closed By SL.");}
         //
      //________________________________________________________
   }}}}
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

 

0

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Perfil da visita

8 anos atrás #135833

Se alguém tiver um BreakEven e TrailingStop por TICKS, por favor, compartilhe..,

Obrigado.

0

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Perfil da visita

8 anos atrás #135874

Se alguém tiver um BreakEven e TrailingStop por TICKS, por favor, compartilhe..,

Obrigado.

Alguém...

0

stearno

Cliente, bbp_participant, comunidade, 379 respostas.

Perfil da visita

8 anos atrás #135903

Karish,

Desculpe-me por uma pergunta tão simples. Onde está o "Main.tpl"?  

0

Karish

Customer, bbp_participant, community, sq-ultimate, 443 replies.

Perfil da visita

8 anos atrás #135904

Karish,

Desculpe-me por uma pergunta tão simples. Onde está o "Main.tpl"?  

Todos os arquivos localizados na pasta "SQ\code",

o arquivo "Main.tpl" localizado na pasta "SQ\code\Mql_MT4".

 

Também há um Main.tpl dentro da pasta "SQ\code\Mql_MT4_BarOpen", mas eu não uso o recurso "BarOpen", apenas com base em ticks, portanto, refiro-me à pasta "SQ\code\Mql_MT4".

0

stearno

Cliente, bbp_participant, comunidade, 379 respostas.

Perfil da visita

8 anos atrás #135905

Obrigado!

0

hankeys

Cliente, bbp_participant, community, sq-ultimate, 487 respostas.

Perfil da visita

7 anos atrás #141012

Alguém fez modificações no código MQL4 do SQ para passar pelo processo de validação no MQL Market? Estou preso a este problema https://www.mql5.com/en/articles/2555#invalid_lot

Você quer ser um algotrader lucrativo? Começamos a usar o software StrateQuant no início de 2014. Atualmente, temos um grande know-how para criar EAs para todos os tipos possíveis de mercados. Compartilhamos esse know-how, aplicativos, ferramentas e também todas as estratégias finais com traders reais. Se você quiser se juntar a nós, preencha o formulário FORMULÁRIO.

0

daveng

Customer, bbp_participant, community, 93 replies.

Perfil da visita

7 anos atrás #141066

Sim, faz parte dos requisitos da MQL verificar o tamanho do lote para garantir que ele permaneça dentro da faixa mínima e máxima de tamanho de lote da corretora. E a etapa do lote também precisa ser verificada.

Você pode usar o código a seguir (para MT4), que modifiquei a partir do código original da MQL:

============================================================================

bool CheckLotSizeValue(double volume)
{
//- volume mínimo permitido para operações comerciais
   se(volume<min_volume)
   {
      Print("O volume do tamanho do lote é menor do que o mínimo permitido. O tamanho mínimo permitido do lote é ",min_volume);
      return(false);
   }

//- volume máximo permitido de operações comerciais
   se(volume>max_volume)
   {
      Print("O volume do tamanho do lote é maior do que o máximo permitido. O tamanho máximo permitido do lote é ",max_volume);
      return(false);
   }

//- obter a etapa mínima de mudança de volume
   int ratio=(int)MathRound(volume/volume_passo);
   se(MathAbs(ratio*volume_step-volume)>0,0000001)
   {
      PrintFormat("O volume do tamanho do lote não é um múltiplo da etapa mínima SYMBOL_VOLUME_STEP=%.2f, o volume correto mais próximo é %.2f",volume_step,ratio*volume_step);
      return(false);
   }
   
   return(true);
}

 

========================================================

 

Em seguida, insira-os na seção "Init":

 

min_volume=MarketInfo(Symbol(),MODE_MINLOT);
max_volume=MarketInfo(Symbol(),MODE_MAXLOT);
volume_step=MarketInfo(Symbol(),MODE_LOTSTEP);

 

========================================================

 

E também insira o comando de chamada de função na seção "start":

 

   Se(!CheckLotSizeValue(LotSize))return;

 

Normalmente, você precisará inserir isso logo no início para que seu EA verifique primeiro o tamanho do lote antes de passar para o restante dos códigos...

=========================================================

 

E essa é apenas uma das verificações. Há várias outras verificações que o administrador da MQL espera que você faça, incluindo verificação de margem livre, verificação de nível de parada, verificação de nível de congelamento, verificação de limite de ordem pendente, verificação de limite de volume de lote e verificação de erro 1 do Ordermodify. Basicamente, todas elas são mencionadas no artigo da MQL.

Além disso, não se esqueça de que todos os seus parâmetros externos precisam ter uma função de verificação para verificar o valor de cada parâmetro, de modo que, quando um usuário digitar um valor inválido, o seu EA exibirá automaticamente um erro no diário para alertar o usuário e interromper o EA.

 

Cumprimentos,

Dave

 

0

hankeys

Cliente, bbp_participant, community, sq-ultimate, 487 respostas.

Perfil da visita

6 anos atrás #143499

Alguém é capaz de fazer uma modificação MQL personalizada do código MQ4 para o SQ, de modo que o tamanho de lote adequado seja enviado diretamente do SQ para o código da estratégia? Então, se eu tiver um tamanho de lote de 0,08 no SQ, ele colocará esse tamanho logo depois que eu clicar em gerar o código MQ4? se eu precisar alterar isso em mais de 100 estratégias, será muito incômodo

Você quer ser um algotrader lucrativo? Começamos a usar o software StrateQuant no início de 2014. Atualmente, temos um grande know-how para criar EAs para todos os tipos possíveis de mercados. Compartilhamos esse know-how, aplicativos, ferramentas e também todas as estratégias finais com traders reais. Se você quiser se juntar a nós, preencha o formulário FORMULÁRIO.

0

daveng

Customer, bbp_participant, community, 93 replies.

Perfil da visita

6 anos atrás #143502

Alguém é capaz de fazer uma modificação MQL personalizada do código MQ4 para o SQ, de modo que o tamanho de lote adequado seja enviado diretamente do SQ para o código da estratégia? Então, se eu tiver um tamanho de lote de 0,08 no SQ, ele colocará esse tamanho logo depois que eu clicar em gerar o código MQ4? se eu precisar alterar isso em mais de 100 estratégias, será muito incômodo

Se você está querendo alterar manualmente o valor padrão do tamanho do lote nos códigos, isso é fácil.

Nos códigos, procure por "extern double Lots = 0.1;", que geralmente está localizado na parte superior dos códigos, e altere manualmente o valor para "0.08".

Salve-o e, em seguida, toda vez que você executar o EA, ele usará um tamanho de lote padrão de "0,08".

Mas se você tiver 100 EAs, precisará fazer isso manualmente para cada EA. Não sei se há alguma maneira fácil de alterar isso em massa.

 

Cumprimentos,

Dave

0

hankeys

Cliente, bbp_participant, community, sq-ultimate, 487 respostas.

Perfil da visita

6 anos atrás #143503

Esse conselho é inútil, eu sei como fazer isso manualmente, sei como fazer isso em conjunto para mais de 100 strs em um clique se o tamanho do lote for o mesmo valor - mas, para mim, cada estratégia negocia um tamanho de lote diferente, que já é usado no SQ e está armazenado no arquivo STR.

 

Se não pudermos escrever algo parecido com o que foi discutido - função MQL personalizada

 

podemos executar algum script (R, python, o que for) que procurará o tamanho do lote no arquivo STR e o colocará automaticamente no arquivo MQ4

Você quer ser um algotrader lucrativo? Começamos a usar o software StrateQuant no início de 2014. Atualmente, temos um grande know-how para criar EAs para todos os tipos possíveis de mercados. Compartilhamos esse know-how, aplicativos, ferramentas e também todas as estratégias finais com traders reais. Se você quiser se juntar a nós, preencha o formulário FORMULÁRIO.

0

Visualizando 10 respostas - 1 até 10 (de um total de 10)