Функция распределения рыночных данных не является гауссовой, скорее она похожа на распределение синусоподобной волны. Поскольку большинство индикаторов базируются на предположении о нормальном распределении цен, их нужно "скорректировать". Решением является использование преобразования Фишера, которое преобразует данные таким образом, чтобы они имели распределение, близкое к нормальному. В статье рассмотрена теория прямого и обратного преобразования Фишера и ее применение в трейдинге, разработан модуль торговых сигналов.
#include <Expert\Signal\SignalMA.mqh>
CSignalMA SignalMA;
int TickCount;
string Str;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
TickCount=0;
SignalMA.Symbol(Symbol());
SignalMA.Period(PERIOD_H1);
SignalMA.Weight(0.5);
SignalMA.PeriodMA(20);
SignalMA.Shift(0);
SignalMA.Method(MODE_SMA);
SignalMA.Applied(PRICE_CLOSE);
return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
TickCount++;
Str = "LongCondition = " + IntegerToString(SignalMA.LongCondition())+"; "+IntegerToString(TickCount)+ "\n";
Str = Str + "ShortCondition = " + IntegerToString(SignalMA.ShortCondition())+"; "+IntegerToString(TickCount);
Comment(Str);
}
//+------------------------------------------------------------------+
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::기간: 기간 변경 금지
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Symbol: 기호 변경 금지
거래 신호 모듈 을 마법사가 만든 Expert Advisor와 별도로 사용할 수 있습니까? 테스트를 위해 내가 쓴
#include <Expert\Signal\SignalMA.mqh>
CSignalMA SignalMA;
int TickCount;
string Str;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
TickCount=0;
SignalMA.Symbol(Symbol());
SignalMA.Period(PERIOD_H1);
SignalMA.Weight(0.5);
SignalMA.PeriodMA(20);
SignalMA.Shift(0);
SignalMA.Method(MODE_SMA);
SignalMA.Applied(PRICE_CLOSE);
return(0);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
TickCount++;
Str = "LongCondition = " + IntegerToString(SignalMA.LongCondition())+"; "+IntegerToString(TickCount)+ "\n";
Str = Str + "ShortCondition = " + IntegerToString(SignalMA.ShortCondition())+"; "+IntegerToString(TickCount);
Comment(Str);
}
//+------------------------------------------------------------------+
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::기간: 기간 변경 금지
2011.11.29 15:36:27 1234 (EURUSD,M1) CExpertBase::Symbol: 기호 변경 금지
다음 코드:
함수가 호출될 때 마다 레이블에 대한 생성자를 호출합니다.
다음 코드에 따르면: 첫 번째 경우에는 표시기가 설정되지만 두 번째 경우에는 설정되지 않습니다(슬래시로 전환) 오류가 발생하지 않습니다.
이 라이브러리에 따르면 두 번째 옵션에 따르면 0을 표시합니다. 다른 모든 기능은 작동하는 것 같습니다.
다음 코드에 따르면: 첫 번째 경우에는 표시기가 설정되지만 두 번째 경우에는 설정되지 않습니다(슬래시로 전환) 오류가 발생하지 않습니다.
내가 이해하는 한, 현재 세 가지 매개변수는 모두 필수입니다.
따라서 표시기가 표시될 창의 번호를 지정해야 합니다(옵션: 0 - 기본 창, ChartIndicatorsTotal() - 새 창, 0에서 ChartIndicatorsTotal() -1 - 특정 기존 창).
오류가 발생하지 않는 것은 좋지 않습니다.
이 라이브러리에 따르면 두 번째 옵션에 따르면 0을 표시합니다. 다른 모든 기능은 작동하는 것 같습니다.
대부분의 경우 가격을 받기 전에 새로 고침(최소한 RefreshRates )을 사용해야 합니다.
올바른 것은 다음과 같아야합니다.
감사합니다. 새로 고침을 지정한 후 Bid와 함께 정말 잘 작동했습니다.
그러나 인디케이터의 출력으로 라이브러리를 사용하면 서브 윈도우 와 핸들의 2개의 매개변수가 필요합니다.그렇지 않으면 잘못된 매개변수 수로 맹세합니다.
감사합니다. 새로 고침을 지정한 후 Bid와 함께 정말 잘 작동했습니다.
그러나 인디케이터의 출력으로 라이브러리를 사용하면 서브 윈도우 와 핸들의 2개의 매개변수가 필요합니다.그렇지 않으면 잘못된 매개변수 수로 맹세합니다.
라이브러리를 사용하려면 2개의 매개변수가 필요합니다. 차트 및 하위 창 .
손잡이가 없다면? 그리고 시스템은 어떤 칠면조를 넣을지 어떻게 압니까? ..지금까지 나는 쓰여진 것을 믿었다 :) 서브윈도우와 핸들.
손잡이 없이? 그리고 시스템은 어떤 칠면조를 넣을지 어떻게 압니까? ..지금까지 나는 쓰여진 것을 믿었다 :) Subwindow와 핸들.
라이브러리 정보(수업 도움말에서)
표시기추가
지정된 차트 창에 지정된 핸들이 있는 표시기를 추가합니다.
ChartIndicatorAdd 의 직접적인 작업에 관하여.
차트 표시기 추가
지정된 차트 창에 지정된 핸들이 있는 표시기를 추가합니다.
CChart 클래스의 경우.
불필요한 질문을 피하기 위해 다음 세 가지 기본 규칙을 준수하려고 합니다.
1. 우리는 소스 코드를 보고, 명확하지 않은 것이 있으면 문서를 봅니다(소스 코드는 항상 진실을 말하고 문서는 거짓일 수 있음을 기억하십시오).
2. OOP의 구현이 우리에게 중요하다면 특정 클래스에 대한 설명으로 시작하여 "직접 실행기"로 이동합니다. "실제 작업"이 중요하다면 OOP를 마지막에 학습해야 합니다(하향식/하향식 코드 학습).
3. 문서 및 출처를 읽은 후에도 명확하지 않은 것이 있으면 포럼으로 이동하십시오.
클래스의 IndicatorAdd 메서드 구현에서 직접
소스를 보면 하위 창과 핸들이 메서드에 전달되고(도움말에 표시된 대로) 세 번째 매개 변수는 클래스 자체에 저장된 데이터에서 가져오는 것이 분명해집니다(차트에 대해 말하는 것입니다). ID).