Análise dos resultados dos testes e otimização no testador de estratégia MetaTrader 5 - página 8

 
Alguém pode me ajudar a criar uma estratégia?

Como eu fiz tudo, mas ainda não consegui corrigir o erro,
Error : 'advanctradingapproch.mq5'
advanctradingapproch.mq5 (linha) 1 (coluna) 1
nenhum gráfico de indicador definido para o indicador 0 0
';' - parêntese aberto esperado advanctradingapproch.mq5 119 61
';' - open parenthesis expected advanctradingapproch.mq5 125 63

here is the code:

//+------------------------------------------------------------------+
//|                                        advancetradingapproch.mq5 |
//|                                  Copyright 2023, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window

input int BuyArrow = 233;
input int SellArrow = 234;

#define  CHART_ARROW_FIRST  0
#define  CHART_ARROW_LAST   1
#define  MODE_MAIN 0
#define  MODE_SIGNAL 1

int BuySignalBar = 0;
int SellSignalBar = 0;
double lastDayClose;
double adxValue, rsiValue, macdMain, macdSignal, stochasticMain, stochasticSignal;
datetime Time[];

double emaBuffer[];
double adxBuffer[];
double rsiBuffer[];
double macdBuffer[];
double stochasticBuffer[];

int OnInit()
{
    emaBuffer[0] = iMA(_Symbol, PERIOD_D1, 8, 0, MODE_EMA, PRICE_CLOSE);
    emaBuffer[1] = iMA(_Symbol, PERIOD_D1, 16, 0, MODE_EMA, PRICE_CLOSE);

    adxBuffer[0] = iADX(_Symbol, PERIOD_D1, 14);
    rsiBuffer[0] = iRSI(_Symbol, PERIOD_D1, 14, PRICE_CLOSE);
    macdBuffer[0] = iMACD(_Symbol, PERIOD_D1, 12, 26, 9, PRICE_CLOSE);
    macdBuffer[1] = iMACD(_Symbol, PERIOD_D1, 12, 26, 9, PRICE_CLOSE);
    stochasticBuffer[0] = iStochastic(_Symbol, PERIOD_D1, 5, 3, 3, MODE_SMA, STO_LOWHIGH);
    stochasticBuffer[1] = iStochastic(_Symbol, PERIOD_D1, 5, 3, 3, MODE_SMA, STO_LOWHIGH);
    
    
    ChartSetInteger(0, CHART_ARROW_FIRST, BuyArrow);
    ChartSetInteger(0, CHART_ARROW_LAST, SellArrow);
    
    ArraySetAsSeries(emaBuffer, true);
    ArraySetAsSeries(adxBuffer, true);
    ArraySetAsSeries(rsiBuffer, true);
    ArraySetAsSeries(macdBuffer, true);
    ArraySetAsSeries(stochasticBuffer, true);

    IndicatorSetInteger(INDICATOR_DIGITS, _Digits);
    SetIndexBuffer(0, emaBuffer);
    SetIndexBuffer(1, adxBuffer);
    SetIndexBuffer(2, rsiBuffer);
    SetIndexBuffer(3, macdBuffer);
    SetIndexBuffer(4, stochasticBuffer);

     return(INIT_SUCCEEDED);
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                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[])
{
    double emaDiff = emaBuffer[0] - emaBuffer[1];
    bool isUptrend = emaDiff > 0;
    bool isDowntrend = emaDiff < 0;

    bool emaCrossoverBuy = (emaBuffer[0] > emaBuffer[1]) && (low[0] < emaBuffer[0]);
    bool emaCrossoverSell = (emaBuffer[0] < emaBuffer[1]) && (high[0] > emaBuffer[0]);

    double currentPrice = close[0];

    bool isHighAdx = adxBuffer[0] > 25;
    bool isOversoldRsi = rsiBuffer[0] < 30;
    bool isBullishMacd = macdBuffer[0] > macdBuffer[1];
    bool isBullishStochastic = (stochasticBuffer[0] > stochasticBuffer[1]) && (stochasticBuffer[0] < 80);

    
    if (isUptrend && emaCrossoverBuy) {
        // Generate Buy signal
    } else if (isDowntrend && emaCrossoverSell) {
        // Generate Sell signal
    }

    return(rates_total);
}

void OnTimer()
{
    // Implement timer-related functionality if needed
}

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
    datetime chartTime[];
    double high[], low[];
    datetime time[];

    if(id == CHARTEVENT_OBJECT_CREATE) {
        if(ObjectFind(0, "BuySignalArrow") != -1)
            ObjectDelete(0, "BuySignalArrow");
        if(ObjectFind(0, "SellSignalArrow") != -1)
            ObjectDelete(0, "SellSignalArrow");

        if(BuySignalBar != -1 && BuySignalBar < ArraySize(high) && BuySignalBar < ArraySize(low)) {
           double buyPrice = high[BuySignalBar] + 10 * Point;
            ObjectCreate(0, "BuySignalArrow", OBJ_ARROW, 0, Time[BuySignalBar], buyPrice);
            ObjectSetInteger(0, "BuySignalArrow", OBJPROP_ARROWCODE, BuyArrow);
        }

        if(SellSignalBar != -1 && SellSignalBar < ArraySize(high) && SellSignalBar < ArraySize(low)) {
            double sellPrice = low[SellSignalBar] - 10 * Point;
            ObjectCreate(0, "SellSignalArrow", OBJ_ARROW, 0, Time[SellSignalBar], sellPrice);
            ObjectSetInteger(0, "SellSignalArrow", OBJPROP_ARROWCODE, SellArrow);
        }
    }
}


 
@Ezio Evan # Alguém pode me ajudar a criar uma estratégia? Como eu fiz tudo, mas ainda não consegui corrigir o erro,
Error : 'advanctradingapproch.mq5'
advanctradingapproch.mq5 (linha) 1 (coluna) 1
nenhum gráfico de indicador definido para o indicador 0 0
';' - parêntese aberto esperado advanctradingapproch.mq5 119 61
';' - open parenthesis expected advanctradingapproch.mq5 125 63

here is the code:

Por favor, não solicite ajuda para o código gerado pelo ChatGPT (ou outra I.A.) . Ele gera um código horrível, misturando MQL4 e MQL5. Use a seção Freelance para esse tipo de solicitação.

  • Normalmente, as pessoas que não sabem programar não recebem ajuda gratuita neste fórum.
  • Se você mostrar suas tentativas e descrever seu problema com clareza, provavelmente receberá uma resposta da comunidade. Use o botão CODE (Alt-S) ao inserir código.
  • Para aprender a programar MQL, você pode pesquisar os diversos artigos disponíveis sobre o assunto, ou exemplos na Base de Código, bem como consultar a Documentação on-line.
  • Se você não quiser aprender a programar, isso não é problema. Você pode consultar a Base de código, se já existir algo gratuito, ou o Market para produtos pagos (às vezes também gratuitos). No entanto, recomendações ou sugestões de produtos do Market não são permitidas no fórum, portanto, você terá que fazer sua própria pesquisa.
  • Por fim, você também tem a opção de contratar um programador na seção Freelance.
Trading applications for MetaTrader 5 to order
Trading applications for MetaTrader 5 to order
  • 2023.11.30
  • www.mql5.com
The largest freelance service with MQL5 application developers
 

Olá, pessoal,

Estou procurando entender quais são os componentes ideais de um computador que ajudarão as grandes otimizações de estratégia (mais de 100.000 combinações em vários anos de dados M1) a serem concluídas mais rapidamente. Estou perguntando para que eu possa seguir suas recomendações e criar uma instância do AWS EC2 (computador virtual personalizado) com as especificações desejadas (quantidade x de vCPUs, quantidade x de memória etc.) para ajudar a agilizar a obtenção de resultados de otimização mais rapidamente.

Se isso ajudar a comunidade, compartilharei os resultados de meus custos de EC2 e o tempo de conclusão.

Agradeço antecipadamente por suas respostas atenciosas.

 

POR FAVOR, AJUDE-ME A RESOLVER ESSE PROBLEMA EM MEU EA DO MT5



Estou tentando criar um EA que utiliza 2 Bandas de Bollinger (uma com 1 std e outra com 1,5 std)

e eu entro em uma posição com um fechamento abaixo da bb (1 std) e o preço de mercado com um sl na bb maior e um tp na linha do meio, quero modificar automaticamente a ordem de modo que ela mova o sl e o tp para o valor mais recente da banda de Bollinger e da linha do meio, ou seja, o candle atual tem um índice de 0 e o candle anterior tem um índice de 1, portanto, os valores da bb no índice 1. Estou ciente de que posso obter o ticket de posição e usá-lo para modificar o sl/tp, mas tenho dificuldade em extrair os dois valores do bb, o tp/sl inicial e o sl/tp modificado a cada candle. Posso obter os valores da função ibands e usar a função copy buffer para extrair os valores, mas só consigo fazer isso para o sl/tp inicial, como faço para extrair os valores para o sl/tp móvel?