MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1668

 
artem artem # :

SanAlex , 예, 올해 테스터를 보았습니다. 모든 것이 정상입니다) 결과가 좋습니다. 가까운 시일 내에 실제 계정으로 출시하려고합니다.

전문가의 이름은 무엇입니까? 코드베이스에서 다운로드 했습니까? 작성자가 함수에서 이것을 구현한 방법을 확인해야 합니다.

 //+------------------------------------------------------------------+
// Permission to trade in this day                                   |
//+------------------------------------------------------------------+
bool TradingDay( int hmin, int hmax) // Определение времени и дня разрешения торговли
  {
   bool dtrade = false ;
   switch (DayOfWeek())
     {
       case 1 : // Monday
         if (Monday == 1 )
            dtrade = true ;
         break ;
       case 2 : // Tuesday
         if (Tuesday == 1 )
            dtrade = true ;
         break ;
       case 3 : // Wednesday
         if (Wednesday == 1 )
            dtrade = true ;
         break ;
       case 4 : // Thursday
         if (Thursday == 1 )
            dtrade = true ;
         break ;
       case 5 : // Friday
         if (Friday == 1 )
            dtrade = true ;
         break ;
       default : //
         dtrade = false ;
         break ;
     }
   if (dtrade && !(Hour() >= hmin && Hour() <= hmax))
      dtrade = true ;
   return dtrade;
  }
//+------------------------------------------------------------------+

뭔가 빠졌습니다 - 온틱에 조건을 추가하기 위해

 
SanAlex # :

전문가의 이름은 무엇입니까? 코드베이스에서 다운로드 했습니까? 작성자가 함수에서 이것을 구현한 방법을 확인해야 합니다.

뭔가 빠졌습니다 - 온틱에 조건을 추가하기 위해

사샤, 제 시간에 일하는 것은 포함되지 않았습니다. 개발 과정에서 연결할 몇 가지 기능을 추가했습니다)
 
MakarFX # :
사샤, 제 시간에 일하는 것은 포함되지 않았습니다. 개발 과정에서 연결할 몇 가지 기능을 추가했습니다)

이제 내가 바꿀거야

 
artem artem # :

SanAlex , 예, 올해 테스터를 보았습니다. 모든 것이 정상입니다) 결과가 좋습니다. 가까운 시일 내에 실제 계정으로 출시하려고합니다.

이것은 제 시간에 작동합니다 - 기능을 변경했습니다

 //---
input string    s0 = "Баланс" ;                   // 1
input string    Template       = "ADX" ;         // Имя шаблона(without '.tpl')
input double    TargetProfit   = 1000000 ;       // Баланс + Прибыль(прибавить к балансу)
input double    TargetLoss     = 0 ;             // Баланс - Убыток(отнять от баланса)
input string    s2 = "Trading options" ;         // 2
input double    Lots           = 0.1 ;           // Lots
input double    MaximumRisk    = 0.02 ;           // MaximumRisk
input double    DecreaseFactor = 3 ;             // DecreaseFactor
input double    InpSLoss       = 4000 ;           // стоплосс
input double    InpTProfit     = 2000 ;           // тейкпрофит
input string    s3 = "TP SL" ;                   // 3
input double    InpTakeProfit  = 2000 ;           // Exchange TP
input double    InpStopLoss    = 4000 ;           // Exchange SL
input string    s4 = "Индикатор MA" ;             // 4
input int       MovingPeriodLw = 13 ;             // MovingPeriodLw
input int       MovingPeriodS1 = 55 ;             // MovingPeriodS1
input int       MovingPeriodS2 = 89 ;             // MovingPeriodS2
input string    s5 = "Индикатор MACD" ;           // 5
input int       InpFastEMA     = 12 ;             // Fast EMA Period
input int       InpSlowEMA     = 26 ;             // Slow EMA Period
input int       InpSignalSMA   = 9 ;             // Signal SMA Period
input string    s6 = "Start Stop" ;               // 6
input datetime HoursFrom      = D'1970.01.02' ; // 1 Время: старт
input datetime HoursTo        = D'1970.01.01' ; // Время: стоп
input datetime HoursFrom2     = D'1970.01.01' ; // 2 Время: старт
input string    s7 = "Time:Start Stop" ;         // 7
input int       HoursFrom1     = 0 ;             // Время: старт
input int       HoursTo1       = 24 ;             // Время: стоп
//+------------------------------------------------------------------+
 //+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
//--- Закрыть Общий профит или профит на паре
   if (ProfitTarget())
     {
       return ;
     }
//--- Закрыть профит BUY или SELL на паре
   ProfitOnTick();
//---
   if ((HoursFrom<HoursTo && TimeLocal ()>=HoursFrom && TimeLocal ()<HoursTo) ||
      (HoursFrom>HoursTo && ( TimeLocal ()<HoursTo || TimeLocal ()>=HoursFrom)) ||
      (HoursFrom2<HoursTo2 && TimeLocal ()>=HoursFrom2 && TimeLocal ()<HoursTo2) ||
      (HoursFrom2>HoursTo2 && ( TimeLocal ()<HoursTo2 || TimeLocal ()>=HoursFrom2)))
     {
       MqlDateTime currTime;
       TimeLocal (currTime);
       int hour0 = currTime.hour;
       if ((HoursFrom1 < HoursTo1 && hour0 >= HoursFrom1 && hour0 < HoursTo1) ||
         (HoursFrom1 > HoursTo1 && (hour0 < HoursTo1 || hour0 >= HoursFrom1)))
        {
         // Определение направления пересечения мувингов
         if (Init)
            InitMetod();
         // Ожидание нового бара на графике
         if (timeprev == Time[ 0 ])
             return ;
         timeprev = Time[ 0 ];
         // Открытие ордера по методу Пуриа
         CheckForOpen();
        }
     }
  }
//+------------------------------------------------------------------+

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

mt4 및 mt5의 시간 기능 작동

파일:
 
MakarFX # :
수업을 없애고 싶습니까?

나는 그들에 대해 최근에야 알았다. 잘 모르겠습니다. 매우 편리합니다. 무엇을 제공합니까? 밀어 넣을 모든 기능? 그것이 문제를 해결한다면.

동일한 Bar 클래스의 두 개의 전역 개체(bar, db_last)가 있습니다. 첫 번째 개체는 각 새 막대(차트의 일반적인 막대)의 매개변수로 초기화되고 두 번째 개체는 모든 조건에 해당하는 막대를 저장합니다. 실제로 Order 클래스의 다른 이미 로컬 주문 개체에서 주문을 열기 위한 db_last 매개변수의 모든 계산이 수행됩니다. db_last 및 bar 매개변수는 여러 곳에서 사용되지만 OnTick()에서 읽기 전용, 초기화 및 할당이 같은 위치에서 이루어지므로 개체에 예기치 않은 변경이 없어야 합니다.

 void OnTick ()
{
  last_time = iTime ( NULL , 0 , 0 );
  BreakevenActivate();

   if (last_time > bar.time_open){
     bar.Initialize();
    TrawlOnFractals();

     if (BarRelativeMA() == "bear" ){
      n_arrow_down++;
       db_last = bar;
       if (db_last.IsBearishDB() == true ) OpenOrder( "bear" );
      ArrowCreate( OBJ_ARROW_DOWN , 0 , "ArrowDown" + IntegerToString (n_arrow_down, 4 , '0' ),
                   0 , iTime ( NULL , 0 , 1 ),AnchorPrise( "bear" ), ANCHOR_BOTTOM );
    }

     if (BarRelativeMA() == "bull" ){
      n_arrow_up++;
      db_last = bar;
       if (db_last.IsBullishDB() == true ) OpenOrder( "bull" );
      ArrowCreate( OBJ_ARROW_UP , 0 , "ArrowUp" + IntegerToString (n_arrow_down++, 4 , '0' ),
                   0 , iTime ( NULL , 0 , 1 ),AnchorPrise( "bull" ), ANCHOR_TOP );
    }

    bar.time_open = last_time;
  }
   
}
 
Nerd Trader # :

나는 그들에 대해 최근에야 알았다. 잘 모르겠습니다. 매우 편리합니다. 무엇을 제공합니까? 모든 기능을 밀어? 그것이 문제를 해결한다면.

동일한 Bar 클래스의 두 개의 전역 개체(bar, db_last)가 있습니다. 첫 번째 개체는 각 새 막대(차트의 일반적인 막대)의 매개변수로 초기화되고 두 번째 개체는 모든 조건에 해당하는 막대를 저장합니다. 실제로 Order 클래스의 다른 이미 로컬 주문 개체에서 주문을 열기 위한 db_last 매개변수의 모든 계산이 수행됩니다. db_last 및 bar 매개변수는 여러 곳에서 사용되지만 OnTick()에서 읽기 전용, 초기화 및 할당이 같은 위치에서 이루어지므로 개체에 예기치 않은 변경이 없어야 합니다.

나는 시도할 것이다 - 그들은 그것을 위해 돈을 받지 않는다)

그러나 오류가 있습니다 . 특히 단순 정규화 오류가 있기 때문에

파일을 업로드 할 수 있습니까? 내가 볼거야.
 
SanAlex # :

전문가의 이름은 무엇입니까? 코드베이스에서 다운로드 했습니까? 작성자가 함수에서 이것을 구현한 방법을 확인해야 합니다.

뭔가 빠졌습니다 - 온틱에 조건을 추가하기 위해

SanAlex , 이 메시지에 첨부된 내가 다운로드한 버전 - Puria + 후행 정지 + 손익분기점 + 시간별 거래가 있습니다. 손에 닿을 때까지 매시간 거래를 테스트할 것입니다.)

 
MakarFX # :

이력이 없으면 테스트 시작 시 표시기 판독값에 영향을 줍니다.

MakarFX , 나도 그것에 대해 생각 했으므로 모든 것이 정상적으로 작동해야합니다.

 
artem artem # :

이 메시지에 첨부된 SanAlex , 내가 다운로드한 버전 - Puria + 후행 정지 + 손익분기점 + 시간별 거래가 있습니다. 손에 닿을 때까지 매시간 거래를 테스트할 것입니다.)

코드 기반 https://www.mql5.com/en/code/12654 에서 찾았습니다.

- 나는 당신의 목표를 놓쳤습니다. 당신은 무엇을 바꾸고 싶습니까?

Советник по методу Пуриа
Советник по методу Пуриа
  • www.mql5.com
Советник открывает позиции по алгоритму метода Пуриа.
 
SanAlex # :

코드 기반 https://www.mql5.com/en/code/12654 에서 찾았습니다.

- 나는 당신의 목표를 놓쳤습니다. 당신은 무엇을 바꾸고 싶습니까?

추가하고 싶은 사항:

1. 그렇게 하라    거래 개시   그리고    모든 지표 조건 준수 확인   (빠른(5) 두 개의 느린(75)(85) 막대를 교차하고 빠른(5)와 같은 방향으로 MACD 막대를 여는 작업을 수행했습니다.    새 양초의 시가로만    (각각 30분 촛불의 첫 번째 눈금) ;
  1. 지표를 "제로화"하기 위한 조건을 만듭니다 . 예를 들어,    빠른 이동 평균의 경우(5) : 느린 이동 평균보다 높으면 매수 신호입니다. 그 후에 그녀가 내려가면   느린 이동 평균 (75)과 (85) 중 하나에 닿거나 그 사이에 있습니다.   -그런 다음 빠른 이동 평균의 신호,    "제로화" 되고 그러한 상태로 유지됩니다.    slow 에 닿거나 그 사이에 머무르는 한 "0" 위치 입니다. 그 이후라면,    빠른 것은 한 방향으로 느린 것을 모두 교차합니다.   (느린 쪽이 만지기 전에 왔던 방향으로 돌아온 경우 포함) -   그러면 이 표시기의 신호가 됩니다 .    MACD도 상황은 비슷합니다.   - 오직    "0"은 MACD=0이 됩니다.   (촛불에 1. MACD가 열린 경우, 예를 들어 값이     0.0043 , 그리고 양초에 2. 값으로    -0.0010 , 그래서    "영"   양초의 MACD 2. 새로운 신호 발행). 그러나 한 가지 사항이 있습니다.    빠르고(5) MACD는 "동등한 기반"이어야 합니다.   — (5)가 느린 양초에 비해 상대적으로 위치를 변경하지 않고 이때 MACD가 반대 영역의 마지막 양초(입장 없음)와 빠른 양초와 동일한 지역의 다음 양초에서 열리면, 그러면 모든 조건이 수렴되고 영장이 발부되어야 합니다.    나는 이 모든 것이 양초의 시가에만 있어야 한다는 사실에 주의를 기울입니다 .
  1. 자, 사실 마지막입니다. 지표에 대한 모든 조건이 일치한 후(양초의 시가에서),    EA는 연속으로 4개의 양초 시가를 기다렸습니다 .

    1. 첫 번째 캔들 시가 - (5) (75), (85) + MACD 바 0 이상 시가 -   4개의 확인 중 1개가 ;
    2. 두 번째 캔들 시가 - (5) (75), (85) + MACD 바 0 이상 시가 -    4개 중 2개의 확인이 ;
    3. 3번째 캔들 시가 - (5) (75), (85) + MACD 바 0 이상 시가 -    4건 중 3건은 ;
    4. 4번째 캔들 시가 - (5) (75), (85) + MACD 바 0 이상 시가 -    4개 중 4개 확인     같은 양초(4일)에 매수할 거래를 엽니다.
  에 대한 주문과 유사한 상황    매도 , 지표만 다른 방향으로 열려야 합니다. 그리고 중요한 포인트가 있습니다-   예를 들어 첫 번째 캔들부터 네 번째 캔들까지의 어느 단계에서든    표시기는 위치를 변경합니다   (예를 들어, 3번째 시가 캔들에서 MACD 막대는 0 또는 = 0 아래에서 열립니다) —   모든 것이 재설정됩니다. 신호는 연속으로 4개의 양초를 열 수 있는 테스트를 통과하지 못했습니다 .