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

 
amsgif80 #:

Este é o código que eu tentei inserir:

Na parte superior do código, jogue isto:
enum ENUM_DIRECTION{
DIRECTION_BUY = 0, // comprar somente
DIRECTION_SELL = 1, // vender somente
DIRECTION_ANY = 2, // comprar & vender
};

input ENUM_DIRECTION inp_direction = DIRECTION_ANY; // direção de comércio permitida


mais adiante encontre onde em código abre compra e onde vende. Veja dentro da função start() ou OnTick()
onde compra está nas condições adicionar:
if(inp_direction!=DIRECTION_SELL)
onde venda está nas condições adicionar:
if(inp_direction!=DIRECTION_BUY )

Onde você o colocou?
 
MakarFX #:
Onde você o colocou?
//+------------------------------------------------------------------+
//| Moving Averages.mq5 |
//| Copyright 2009-2013, MetaQuotes Software Corp.
//+------------------------------------------------------------------+





#property copyright "Copyright 2009-2013, MetaQuotes Software Corp.
#link da propriedade"https://www.mql5.com"
#propriedade versão "1.00"

enum ENUM_DIRECTION{
DIRECTION_BUY = 0, // comprar somente
DIRECTION_SELL = 1, // vender apenas
DIRECTION_ANY = 2, // compra e venda
};

entrada ENUM_DIRECTION inp_direction = DIRECTION_ANY; // direção comercial permitida

#Incluir <Comércio.mqh>

entrada dupla MaximumRisk = 0,02; // Risco máximo em porcentagem
fator de redução dupla de entrada = 3; // fator de redução
input int Período Móvel = 12; // Período Médio Móvel
input int MovingShift = 6; // Moving Average shift



//---
int ExtHandle=0;


//+------------------------------------------------------------------+
//| Função de inicialização do especialista |
//+------------------------------------------------------------------+




int OnInit(nulo)
{
//---
ExtHandle=iMA(_Symbol,_Period,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE);
if(ExtHandle==INVALID_HANDLE)
{
printf("Error creating MA indicator");
return(INIT_FAILED);
}
//---
return(INIT_SUCCEED);
}
//+------------------------------------------------------------------+
//| função tick expert |
//+------------------------------------------------------------------+
nulo OnTick(nulo)
{
//---
if(PositionSelect(_Symbol))
CheckForClose();
senão
CheckForOpen();
//---
}
//+------------------------------------------------------------------+
//| Função de desinicialização de especialistas |
//+------------------------------------------------------------------+
nulo OnDeinit(const int razão)
{
}
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Calcular o tamanho ideal do lote |
//+------------------------------------------------------------------+
duplo TradeSizeOptimized(void)
{
preço duplo = 0,0;
margem dupla=0,0;
//--- calcular o tamanho do lote
if(!SymbolInfoDouble(_Symbol,SYMBOL_ASK,price))
retorno(0,0);
if(!OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1.0,price,margin))
retorno(0,0);
if(margem<=0,0)
retorno(0,0);

double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)*MaximumRisk/margin,2);
//--- calcular a duração de uma série de negócios perdidos ininterruptamente
if(DiminaseFactor>0)
{
//--- solicitar todo o histórico comercial
HistóriaSelect(0,TimeCurrent());
//--
int orders=HistoryDealsTotal(); // número total de negócios
int losses=0; // número de negócios perdidos na série

for(int i=orders-1;i>=0;i--)
{
ulong ticket=HistoryDealGetTicket(i);
if(ticket==0)
{
Imprimir ("HistoryDealGetTicket failed, no trade history");
pausa;
}
//--- verificação de símbolo comercial
if(HistoryDealGetString(ticket,DEAL_SYMBOL)!=_Símbolo)
continuar;
//--- verificar lucro
double profit=HistoryDealGetDouble(ticket,DEAL_PROFIT);
if(lucro>0,0)
pausa;
if(lucro<0,0)
perdas++;
}
//---
if(perdas>1)
lote=NormalizarDuplicar(lote-qualquer*perdas/DiminuiçãoFactor,1);
}
//--- normalizar e verificar os valores admissíveis do volume de comércio
duplo stepvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
lot=stepvol*NormalizeDouble(lot/stepvol,0);

double minvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN);
if(lote<minvol)
lote=minvol;

double maxvol=SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MAX);
if(lote>maxvol)
lot=maxvol;
//----valor de retorno do volume de comércio
retorno(lote);
}


//+------------------------------------------------------------------+
//| Verifique as condições de posição aberta |
//+------------------------------------------------------------------+
CheckForOpen(nulo)
{
MqlRates rt[2];
//--- copiar valores de preços
if(CopyRates(_Symbol,_Period,0,2,rt)!=2)
{
Print("CopyRates of ",_Symbol," falhou, sem história");
retornar;
}
//----comércio somente no primeiro tick do novo bar
if(rt[1].tick_volume>1)
retornar;
//--- obter o valor atual do indicador de Média Móvel
duplo ma[1];
if(CopyBuffer(ExtHandle,0,0,1,ma)!=1)
{
Print("CopyBuffer da iMA falhou, sem dados");
retornar;
}
//--- verificação do sinal
ENUM_ORDER_TYPE signal=WRONG_VALUE;

if(rt[0].open>ma[0] && rt[0].close<ma[0])
signal=ORDER_TYPE_SELL; // condição para vender se(inp_direction!=DIRECTION_BUY)
senão
{
if(rt[0].open<ma[0] && rt[0].close>ma[0])
signal=ORDER_TYPE_BUY; // condição para comprar if(inp_direction!=DIRECTION_SELL)
}
//--- verificações adicionais
if(signal!=WRONG_VALUE)
if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
if(Barras(_Símbolo,_Periodo)>100)
{
Comércio de CTrade;
PosiçãoOpen(_Símbolo,sinal,TradeSizeOptimized(),
SymbolInfoDouble(_Symbol,signal===ORDER_TYPE_SELL ? SYMBOL_BID:SYMBOL_ASK,)
0,0);
}
//---
}
//+------------------------------------------------------------------+
//| Verifique as condições de posição próxima |
//+------------------------------------------------------------------+
cheque forClose(nulo)
{
MqlRates rt[2];
//--- copiar valores de preços
if(CopyRates(_Symbol,_Period,0,2,rt)!=2)
{
Print("CopyRates of ",_Symbol," falhou, sem história");
retornar;
}
//----comércio somente no primeiro tick do novo bar
if(rt[1].tick_volume>1)
retornar;
//--- obter o valor atual do indicador de Média Móvel
duplo ma[1];
if(CopyBuffer(ExtHandle,0,0,1,ma)!=1)
{
Print("CopyBuffer da iMA falhou, sem dados");
retornar;
}
//--- obter o tipo da posição, selecionada anteriormente através da PositionSelect().
bool signal=false;
tipo longo=PosiçãoGetInteger(POSITION_TYPE);

if(type===(long)POSITION_TYPE_BUY && rt[0].open>ma[0] && rt[0].close<ma[0])
sinal=verdadeiro;
if(type===(long)POSITION_TYPE_SELLL && rt[0].open<ma[0] && rt[0].close>ma[0])
sinal=verdadeiro;
//--- verificações adicionais
se(sinal)
if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED))
if(Barras(_Símbolo,_Periodo)>100)
{
Comércio de CTrade;
PosiçãoFechar(_Símbolo,3);
}
//---
}
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
Открой новые возможности в MetaTrader 5 с сообществом и сервисами MQL5
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
 

Esta seção deve ser como esta

 //--- проверка сигналов
   ENUM_ORDER_TYPE signal=WRONG_VALUE;

   if(rt[0].open>ma[0] && rt[0].close<ma[0])
     {
      if(inp_direction!=DIRECTION_BUY)
         signal=ORDER_TYPE_SELL;
     }
   else
     {
      if(rt[0].open<ma[0] && rt[0].close>ma[0])
        {
         if(inp_direction!=DIRECTION_SELL)
            signal=ORDER_TYPE_BUY;
        }
     }
 //--- дополнительные проверки 
 
MakarFX #:

Esta seção deve ser como esta.

Makar, este aqui.

      if(inp_direction==DIRECTION_SELL||inp_direction==DIRECTION_ANY)

é melhor substituída por isto.

      if(inp_direction!=DIRECTION_BUY)
 
Alexey Viktorov #:

Makar, este aqui

é melhor substituída por isto.

Substituído)
 
MakarFX #:

Esta seção deve ser como esta

Obrigado do fundo do meu coração! Tudo funcionou ao mesmo tempo, está funcionando. E já me arrebentei sobre como fazer isso))

 
Posso fazer-lhe novamente a mesma pergunta, mas sobre minha própria simples EA gerada por um editor? Pensei que agora eu mesmo conseguiria fazê-lo, mas não sei onde colocar este código de compra/venda. Eu não sei onde colar este código de compra/venda.
 
amsgif80 #:
Posso fazer-lhe novamente a mesma pergunta, mas sobre minha própria simples EA gerada por um editor? Pensei que agora eu mesmo conseguiria fazer isso, mas não é tão fácil. Não consigo descobrir onde colar este código de compra/venda.
Mostre-me
 
amsgif80 #:

Eu lhe mostrei como inserir o código no fórum


 
MakarFX #:

Você não mudou nada.

seu apelo

está dentro.

Makar agradece pela dica