MetaTrader 5 전략 테스터의 테스트 결과 분석 및 최적화 - 페이지 8

 
전략을 세우는 데 도움이 될 수 있습니까 ?

내가 모든 일을했지만 여전히 오류를 수정할 수 없습니다 ,
오류 : 'advanctradingapproch.mq5'
advanctradingapproch.mq5 (줄) 1 (열) 1
인디케이터에 대해 정의된 인디케이터 플롯 없음 0 0
';' - 괄호 열기 예상 advanctradingapproch.mq5 119 61
';' - 열린 괄호 예상 advanctradingapproch.mq5 125 63

여기에 코드가 있습니다:

//+------------------------------------------------------------------+
//|                                        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 # 내가 모든 일을했지만 여전히 오류를 수정할 수 없기 때문에 전략을 세우는 데 도움이 될 수 있습니까 ?
오류 : 'advanctradingapproch.mq5'
advanctradingapproch.mq5 (줄) 1 (열) 1
인디케이터에 대해 정의된 인디케이터 플롯 없음 0 0
';' - 괄호 열기 예상 advanctradingapproch.mq5 119 61
';' - 열린 괄호 예상 advanctradingapproch.mq5 125 63

여기 코드가 있습니다:

ChatGPT(또는 다른 인공지능 )가 생성한 코드에 대해서는 도움을 요청하지 마세요. MQL4와 MQL5를 혼합하여 끔찍한 코드를 생성합니다. 이러한 요청은 프리랜서 섹션을 이용해 주세요.

  • 일반적으로 코딩을 할 수 없는 사람들은 이 포럼에서 무료 도움을 받지 못합니다.
  • 시도한 내용을 보여주고 문제를 명확하게 설명하면 커뮤니티에서 답변을 받을 가능성이 높습니다. 코드를 삽입할 때는 코드 버튼(Alt-S )을 사용하세요.
  • MQL 프로그래밍을 배우려면 해당 주제에 대한 많은 문서나 코드베이스의 예제를 조사하고 온라인 설명서를 참조할 수 있습니다.
  • 코딩을 배우고 싶지 않더라도 문제가 되지 않습니다. 이미 무료가 있는 경우 코드베이스를 살펴보 거나 유료 제품(무료인 경우도 있음)의 경우 마켓에서 찾아볼 수 있습니다. 그러나 마켓 제품에 대한 추천이나 제안은 포럼에서 허용되지 않으므로 직접 조사해야 합니다.
  • 마지막으로 프리랜서 섹션에서 프로그래머를 고용하는 옵션도 있습니다.
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
 

안녕하세요,

대규모 전략 최적화(여러 해의 M1 데이터에 걸쳐 100,000개 이상의 조합)를 더 빨리 완료하는 데 도움이 되는 컴퓨터의 이상적인 구성 요소가 무엇인지 파악하고 싶습니다. 그런 다음 권장 사항을 참고하여 원하는 사양(vCPU 개수, 메모리 개수 등)의 AWS EC2 인스턴스(사용자 지정 가상 컴퓨터)를 생성하여 최적화 결과를 더 빨리 얻을 수 있도록 간소화할 수 있도록 문의하는 것입니다.

커뮤니티에 도움이 된다면 EC2 비용과 완료까지 걸린 시간을 나중에 공유하겠습니다.

사려 깊은 답변에 미리 감사드립니다.

 

내 MT5 EA에서이 문제를 해결하도록 도와주세요.



2 개의 볼린저 밴드 (하나는 1 스탯과 다른 하나는 1.5 스탯)를 사용하는 EA를 만들려고합니다.

그리고 나는 더 큰 볼린저 밴드에 SL을, 중간 선에 TP를 사용하여 볼린저 밴드와 중간 선의 최신 값으로 SL과 TP를 이동하도록 오더를 자동으로 수정하고 싶습니다. 즉, 현재 캔들의 지수는 0이고 이전 캔들의 지수는 1이므로 지수 1의 BB 값. 나는 이것이 SL / TP가 맞을 때까지 일어나기를 원합니다. 누군가 나를 올바른 방향으로 안내 할 수 있습니까? 나는 아마추어이고이 EA 물건을 막 시작하고 있습니다. 나는 포지션 티켓을 얻고 그것을 사용하여 SL / TP를 수정할 수 있다는 것을 알고 있지만 모든 양초로 BB, 초기 TP / SL 및 수정 된 SL / TP에서 2 값을 추출하는 데 어려움을 겪고 있습니다. 나는 ibands 함수에서 값을 가져 와서 복사 버퍼 기능을 사용하여 값을 추출 할 수 있지만 초기 SL / TP에 대해서만 성공적으로 수행하지만 롤링 SL / TP의 값을 어떻게 추출합니까, 나를 도와주세요, 도움을 주셔서 감사합니다, 고마워요.

사유: