Expert Advisors 구현에 대한 논의. - 페이지 8

 
altec3 :

안녕하세요!

현재 날짜의 이익을 결정하는 함수를 작성하려고 합니다.

기능에서 방법을 알려주세요

현재 날짜부터 시작하는 기간을 지정합니다. 기간의 끝이 to_date=TimeCurrent()인 것이 분명합니다. 현재 날짜로부터 정확히 00h:00m:00부터 시작하도록 from_date 기간의 시작을 올바르게 지정하는 방법은 무엇입니까?

맛을 선택하십시오:

 datetime    iTime (
   const string         symbol,           // символ
   ENUM_TIMEFRAMES      timeframe,       // период PERIOD_D1
   int                  shift             // сдвиг
   );
 int    CopyTime (
   string            symbol_name,     // имя символа
   ENUM_TIMEFRAMES   timeframe,       // период PERIOD_D1
   int               start_pos,       // откуда начнем 0
   int               count,           // сколько копируем 1
   datetime          time_array[]     // массив для копирования времени открытия. Объявить заранее

또는 가장, 가장. 이미 제안된 것입니다.

 
Vladimir Karputov :

오늘 적어도 하나의 틱이 있다고 가정하면 알고리즘은 다음과 같습니다. 현재 시간을 MqlDateTime 구조로 보냅니다 . 그런 다음 이 구조에서 시, 분, 초를 재설정합니다. 시간이 지남에 따라 편집된 구조를 변형해야 합니다.


결과:

고맙습니다! 함수를 추가하면 또 다른 질문입니다.

 //+------------------------------------------------------------------+
//|Функция возвращает прибыль за текущие сутки                       |
//+------------------------------------------------------------------+
double Day_Profit()
  {
//--Запрашиваем историю сделок за последнии сутки
   HistorySelect ( TimeCurrent ()- PeriodSeconds ( PERIOD_D1 ), TimeCurrent ());
   uint      total       = HistoryDealsTotal ();   // количество сделок в истории
   ulong     ticket      = 0 ;                     // тикет сделки в истории
   long      type        = 0 ;                     // тип сделки
   double    profit      = 0.0 ;                   // финансовый результат сделки
   double    commission  = 0.0 ;                   // коммиссия по сделке
   double    DayProfit   = 0.0 ;                   // прибыль за текущие сутки
//--- for all deals
   for ( uint i= 0 ; i<total; i++)
     {
       if ((ticket= HistoryDealGetTicket (i))> 0 )       //--- если имеются сделки, то...
        {
         profit      = HistoryDealGetDouble (ticket, DEAL_PROFIT );
         commission  = HistoryDealGetDouble (ticket, DEAL_COMMISSION );
         if ( HistoryDealGetInteger (ticket, DEAL_TYPE )!= DEAL_TYPE_BALANCE )
           {
            DayProfit+=(profit+commission);
           }
        }
     }
   return (DayProfit);
  }
//+------------------------------------------------------------------+

Expert Advisor로 전환하면 거래가 분석되는 기간이 어떻게 업데이트됩니까? 고문이 며칠 동안 일한 다음 다음 날이 시작되면 기간이 업데이트된다고 가정하십시오.

Expert Advisor에서 위 기능 구현:

 void OnTick ()
  {
   if (Day_Profit()<ProfitMax)
     {
      ExtExpert. OnTick ();
     }
   return ;
  }
 
altec3 :

고맙습니다! 함수를 추가하면 또 다른 질문입니다.

Expert Advisor로 전환하면 거래가 분석되는 기간이 어떻게 업데이트됩니까? 고문이 며칠 동안 일한 다음 다음 날이 시작되면 기간이 업데이트된다고 가정하십시오.

Expert Advisor에서 위 기능 구현:

시간은 하루의 시작부터 현재 시간 + 일 또는 + 3일까지 설정해야 합니다.

하루의 시작을 결정하는 방법 - 이미 알고 있습니다.

 

안녕하세요!

상품을 주문하기 전에 해당 상품의 스프레드를 결정할 필요가 있습니다. 표준 MQL5 라이브러리 에는 CSymbolInfo 클래스가 포함됩니다. 그 때 이 검사를 가장 잘 구현하는 방법에 대해 생각 했습니다. CSymbolInfo를 통해 또는 함수를 사용하여? 전문가 여러분, 가장 좋은 방법을 알려주세요! 이 문제가 이미 제기된 경우 올바른 방향으로 저를 보내주시면 대단히 감사하겠습니다.

 

안녕하세요!

약간의 조언이 필요합니다. EA에 다른 시간대의 신호 모듈이 포함된 경우 막대는 어떻게 계산됩니까?

예를 들어, 확률론에 기반한 두 개의 신호 모듈을 포함하는 간단한 Expert Advisor가 있습니다(메인 라인이 0 및 1 막대에서 신호 라인 위에 있는 경우 - BUY, 0 및 1 막대에서 신호 라인 아래 - SELL) - 하나에 H1, 다른 하나는 M15에 있습니다. 두 모듈의 가중치는 동일하며 Expert Advisor에서 거래를 시작하기 위한 임계값은 두 모듈의 신호가 동시에 고려되어야 하는 방식으로 설정됩니다. EA는 H1 기간으로 차트에서 작동합니다. H1의 스크린샷을 보면 모든 것이 명확합니다. 마지막 막대와 끝에서 두 번째 막대에서 메인 라인이 신호 라인보다 높기 때문에 구매합니다. 그러나 M15 차트에서 어떤 막대가 0으로 간주되어야 하는지 알 수 없습니다. 어떤 막대가 1인가요? 거래가 진행 중이므로 M15에서 거래 조건이 충족되어야 합니다.

파일:
H1.png  43 kb
M15.png  21 kb
 
altec3 :

예를 들어, 확률론을 기반으로 하는 두 개의 신호 모듈을 포함하는 간단한 Expert Advisor가 있습니다(메인 라인이 0 및 1 막대에서 신호 라인 위에 있는 경우 - BUY, 0 및 1 막대에서 신호 라인 아래 - SELL) - 하나에 H1, 다른 하나는 M15에 있습니다.

제로 바는 사악하다! 1 막대에 있는 것처럼 계산된 기록에 표시기가 표시됩니다. 닫힙니다(다시 그릴 가능성을 고려하지 않으면 단순화됨). 따라서 닫힌 막대를 기반으로 전략을 작성하고 테스터에서 MT4의 이전 TF의 표시기는 0 막대라도 닫힌 상태로 결과를 미리 표시합니다. 미래에서.
결과적으로 실망감: 차트에 있는 것과 테스터에 있는 다른 것, 그러나 실시간으로 모든 것이 반대입니다.
이 때문에 시스템 오류가 어디에 있는지 알아낼 때까지 내 인생의 절반을 잃었습니다. 더 어린 기간에 더 높은 기간의 지표 작업을 올바르게 표시하려면 Masha와 함께 특별한 접근 방식이 필요합니다. 예를 들어 모든 것이 간단합니다. 기간에 기간과 순서의 비율을 곱했지만 일부가 아닌 경우 -선형 계산, 0 bar에서 계산의 모방만 있습니다.
차트에 시니어 TF를 올바르게 표시하기 위해 1년 내내 RSI를 깨뜨렸습니다.
나는 주장하지 않습니다. 적어도 닫힌 막대의 신호, 특히 현재 TF와 관련하여 오래된 막대의 신호를 사용하고 다시 그리기, 특히 사용자 지정 표시기 를 확인하는 것이 좋습니다.
 
altec3 :

안녕하세요!

약간의 조언이 필요합니다. EA에 다른 시간대의 신호 모듈이 포함된 경우 막대는 어떻게 계산됩니까?

예를 들어, 확률론에 기반한 두 개의 신호 모듈을 포함하는 간단한 Expert Advisor가 있습니다(메인 라인이 0 및 1 막대에서 신호 라인 위에 있는 경우 - BUY, 0 및 1 막대에서 신호 라인 아래 - SELL) - 하나에 H1, 다른 하나는 M15에 있습니다. 두 모듈의 가중치는 동일하며 Expert Advisor에서 거래를 시작하기 위한 임계값은 두 모듈의 신호가 동시에 고려되어야 하는 방식으로 설정됩니다. EA는 H1 기간으로 차트에서 작동합니다. H1의 스크린샷을 보면 모든 것이 명확합니다. 마지막 막대와 끝에서 두 번째 막대에서 메인 라인이 신호 라인보다 높기 때문에 구매합니다. 그러나 M15 차트에서 어떤 막대가 0으로 간주되어야 하는지 알 수 없습니다. 어떤 막대가 1인가요? 거래가 진행 중이므로 M15에서 거래 조건이 충족되어야 합니다.

히스토리에 보면 이미 닫힌 막대가 있고 0이 나쁘지는 않지만 모바일이고 현재 가격 에 따라 형성되기 때문에 이것을 고려해야하며 가격 동안 스토캐스틱 방향의 변경이 가능합니다. 점프 하므로 더 민감합니다. 예를 들어 닫힐 수 있습니다.

열린 0 && 1 && 2에 대해서만 다른 막대를 추가해 보십시오. 배수구가 줄어들 수도 있습니다.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...