Как ущербный, могу позволить себе написать правду. И паук и qq - для новичка полное дерьмо. Когда человек, вне зависимости от опыта, приходит на рынок, он сталкивается со сложной задачей: найди то, не знаю что. Но чтобы был профит. И самое сложное определиться, ГДЕ именно копать и КАК копать. На форумах этой информации практически нет. А если и...
저장된 히스토리(MqlRates)의 형식으로 MetaQuotes는 물론 너무 스마트했습니다(스마트하지 않음). 이것은 이해할 수 있습니다. 형식이 외환 시장에서 개발되었을 때 고정 스프레드가 우세했고 시장(변동) 스프레드는 여전히 이색적이었습니다. 고정 스프레드조차도 실제로 유동적임이 분명했지만, DC는 보도 자료 및 시장의 급격한 변화 시점에서 고정성을 보장하지 않기 때문에(여기에 인용 부호는 거의 모든 DC의 일반적인 제안에서 인용을 나타냅니다. 기간).
그러나 시대는 변했고 우리는 우리가 가진 것을 가지고 있습니다. 스프레드는 매 틱마다 떠 있습니다. 괜찮습니다. ... 역사적인 인용문에만 반영되지 않습니다. 안타깝게도.
막대당 하나의 스프레드 값만 히스토리에 저장됩니다. 그리고 이것은 지금 충분하지 않습니다. 그리고 브로커가 절대적으로 정직한(틱 피드의 실제 방송에 해당) 역사적 기반을 제공하더라도 실제 거래 내역과 테스터의 거래 내역 사이에 일치가 없기 때문에 백 테스트 시 왜곡이 발생합니다. 그 이유는 MqlRates 형식의 설명력이 부족하기 때문입니다.
structMqlRates
{
datetime time; // время начала периода 8 байт
double open; // цена открытия 8 байтdouble high; // наивысшая цена за период 8 байтdouble low; // наименьшая цена за период 8 байтdouble close; // цена закрытия 8 байтlong tick_volume; // тиковый объем8 байтint spread; // спред 4 байта
long real_volume; // биржевой объем 8 байт
};
// итого: size_of(MqlRates) = 52 байта
이 구조는 막대 내부의 스프레드가 변경되지 않고 현재 거래 현실과 일치하지 않는다고 가정합니다.
"전체" 형식이 될 수 있는 것에 대한 추가 추론. 현재 지원되지 않는다는 것을 분명히 하기 위해 조건부로 "Mql_6_Rates"라는 이름을 지정했습니다.
다음은 두 가지 옵션입니다. 첫 번째는 패킹된 구조(디스크용)입니다. 특별한 알고리즘에 의한 압축 없이. 전송 중 트래픽을 줄이기 위해 여전히 몇 배(2-3, 추정)로 줄일 수 있습니다. 압축 형식은 여기에서 논의되지 않습니다.
struct Mql_6_PackedRates
{
time_t time; // время начала периода 4 байта // восьмибайтный time64_t неактуален до 2038 годаfloat average_price; // средняя цена бара грубо (на три значащих цифры меньше точности _digits) 4 байтаfloat d_open; // поправка к цене открытия 4 байтаfloat d_high; // поправка к наивысшей цене за период 4 байтаfloat d_low; // поправка к наименьшей цене за период 4 байтаfloat d_close; // поправка к цене закрытия 4 байтаushort spread; // средний спред 2 байтаchar d_open_spread; // поправка к спреду открытия 1 байтchar d_high_spread; // поправка к спреду high 1 байтchar d_low_spread; // поправка к спреду low 1 байтchar d_close_spread; // поправка к спреду close 1 байтuint tick_volume; // тиковый объем 4 байтuint real_volume; // биржевой объем 4 байтdouble OpenBid() { return (average_price+d_open); } // функции на лету вычисляющие точные значенияdouble OpenAsk() { return (average_price+d_open+OpenSpread()); }
double HighBid() { return (average_price+d_high); }
и т.д...... // функции на лету вычисляющие точные значения
...
...
double OpenSpread() { return ((spread+d_open_spread) * _digits); }
...
и т.п ......
Mql_6_Rates UnpackRates() { Mql_6_Rates Rates; .... /*заполняем*/ ..... return (Rates);}
};
// Итого у меня получилось 38 байт, всё правильно? Вся информация об 4 точках bid-ask упакована без искажений
"포장" 형식이 거래자의 디스크에 저장될 때 최적인 것으로 가정합니다. 디스크에서 메모리로 로드할 때 즉시 압축을 풀 수 있으며 압축 풀기 기능은 구조에 "첨부"됩니다.
압축을 푼 기록(MQL에서 액세스하기 위한)은 다음과 같을 수 있습니다.
struct Mql_6_Rates
{
datetime time; // время начала периода 8 байтdouble open_bid; // цена открытия 8 байтdouble open_ask; // цена открытия 8 байтdouble high_bid; // наивысшая цена за период 8 байтdouble high_ask; // наивысшая цена за период 8 байтdouble low_bid; // наименьшая цена за период 8 байтdouble low_ask; // наименьшая цена за период 8 байтdouble close_bid; // цена закрытия 8 байт double close_ask; // цена закрытия 8 байт long tick_volume; // тиковый объем 8 байт long real_volume; // биржевой объем 8 байт
};
//итого = 88 байт
이것은 지금보다 많지만 막대의 모든 고정 지점에서 스프레드를 계산할 수 있습니다. 즉, 전통적인 {Open+High+Low+Close} 방식에 따라 분 막대에 정보를 쓰면 "전체"입니다.
나에게 이 정보는 중복되며 개방 지점에서 최대의 환상을 만드는 경향이 있습니다. 다른 기호의 바 영업 시간은 일치하지 않지만 (천문) 분의 시작 부분에 정확히 기호에 대한 입찰-매도 가격은 마지막으로 인용된 입찰-매도 가격과 정확히 일치합니다. 종가 . 따라서 가장 테스트 가능한 회의록 형식(전통과 상식 간의 가장 건전한 절충안)은 다음과 같습니다.
struct Mql_6_Rates
{
datetime time; // время начала периода 8 байтdouble high_bid; // наивысшая цена за период 8 байтdouble high_ask; // наивысшая цена за период 8 байтdouble low_bid; // наименьшая цена за период 8 байтdouble low_ask; // наименьшая цена за период 8 байтdouble close_bid; // цена закрытия 8 байт double close_ask; // цена закрытия 8 байт long tick_volume; // тиковый объем 8 байт long real_volume; // биржевой объем 8 байт
};
//итого = 72 байта
// 압축된 디스크 형식의 해당 절약은 또 다른 7바이트입니다. SizeOf(Mql_6_PackedRates)는 31바이트로 축소됩니다.
"개봉 가격으로" 환경 친화적인(가장 합리적인) 테스트를 위해서는 천문학적인 시작 시간을 1분으로 잡아야 합니다. 이전 막대의 종가입니다. 이 경우 정확한 다중 통화 가격 동기화가 달성됩니다. 이 동기화는 시장 주문을 거래하는 다중 통화 Expert Advisors를 디버깅하는 데 중요합니다. 거래 제한 및 지정가 주문의 경우 각 막대의 극한값에 대한 정보가 중요합니다. 또한 논의 중인 형식으로 완전히 제시됩니다.
--
사실, 저는 지금 개인적인 목적으로 이러한 형식을 개발하고 있습니다. 여기에 게시하는 것은 내 개발의 부산물일 뿐입니다. 아마도 누군가가 도움이 될 것입니다.
저장된 히스토리(MqlRates)의 형식으로 MetaQuotes는 물론 너무 스마트했습니다(스마트하지 않음). 이것은 이해할 수 있습니다. 형식이 외환 시장에서 개발되었을 때 고정 스프레드가 우세 했지만 시장(변동) 스프레드는 여전히 이색적이었습니다. 고정 스프레드조차도 실제로 유동적임이 분명했지만, DC는 보도 자료 및 시장의 급격한 변화 시점에서 고정성을 보장하지 않기 때문에(여기에 인용 부호는 거의 모든 DC의 일반적인 제안에서 인용을 나타냅니다. 기간).
MT5는 원래 교환 터미널로 위치했습니다. 그리고 거래소에서 ECN 가격 책정 법률은 매우 오래되었습니다. 저것들. 실패에 대한 변명은 참을 수 없습니다. 글쎄요, 그들의 팀에는 들을 수 있는 강력한 알고리즘 트레이더가 없었습니다. 건전한 논리라기 보다는 "플랫폼 개발에 성공한 년수"만이 원칙인 것 같습니다.
hrenfx : MT5는 원래 교환 터미널로 위치했습니다. 그리고 거래소에서 ECN 가격 책정 법률은 매우 오래되었습니다. 저것들. 실패에 대한 변명은 참을 수 없습니다. 글쎄요, 그들의 팀에는 들을 수 있는 강력한 알고리즘 트레이더가 없었습니다. 건전한 논리라기 보다는 "플랫폼 개발에 성공한 년수"만이 원칙인 것 같습니다.
나는 정당화하려고 하지 않았다. 정당화하려면 먼저 비난해야 합니다. 그리고 어떻게 든 나는 그것에 맞지 않습니다 .... :)
저장된 히스토리(MqlRates)의 형식으로 MetaQuotes는 물론 너무 스마트했습니다(스마트하지 않음). 이것은 이해할 수 있습니다 . 형식이 외환 시장에서 개발되었을 때 고정 스프레드가 우세했고 시장(변동) 스프레드는 여전히 이색적이었습니다. 고정 스프레드조차도 실제로 유동적임이 분명했지만, DC는 보도 자료 및 시장의 급격한 변화 시점에서 고정성을 보장하지 않기 때문에(여기에 인용 부호는 거의 모든 DC의 일반적인 제안에서 인용을 나타냅니다. 기간).
그런 편지가 있습니다. 그러나 간격(불연속 인용 부호 점프)은 막대 시작 부분뿐만 아니라 언제든지 발생할 수 있습니다. 따라서 정의에 따라 "얇아진" 형식은 죄가 없는 것이 아닙니다. 틱에서만 전체 피드. 그리고 유리의 역사에서 훨씬 더 풍부할 수 있습니다. 나는 그런 타협점을 찾을 때까지 나 자신을 위한 1분 형식을 만들려고 노력하고 있습니다. 나는 아마도 위에서 설명한 대로 그대로 둘 것입니다(Open 없이. {Hi-Lo-Close}만). 모든 단점을 이해합니다. 이것은 테스터를 위한 코딩 버전 중 하나일 뿐입니다. 또한 원시 틱 또는 모든 방법({bid-ask-time} 틱 형식을 유지하면서)으로 인위적으로 얇게 만든 틱에 대한 테스트를 제공합니다.
그렇게 보이지 않습니다. 내가 정말 필요할 때, 나는 그것을 한다.
일부 타사 소프트웨어 개발자가 귀하의 기능을 제한하는 경우 이는 매우 나쁩니다.
그것은 불가능 합니다.
헛소리하지 말고 부엌을 더 홍보하십시오.)
재킷 , 분류에 따라 "멍청한 놈과 삐라스트" 사이에서 외모를 엉망으로 만들지 마십시오. QQ 로 이동합니다.
추신: 주식 거래자 들을 위한 교육 프로그램이 있습니다. 여기에서 그들이 FOREX 시장의 현실과 그들이 익숙한 거래소와 구별되는 다양한 특징에 대한 지식을 채울 수 있습니다. 시야를 넓히세요!
재킷 , 분류에 따라 "멍청한 놈과 삐라스트" 사이에서 외모를 엉망으로 만들지 마십시오. QQ 로 이동합니다.
저장된 히스토리(MqlRates)의 형식으로 MetaQuotes는 물론 너무 스마트했습니다(스마트하지 않음). 이것은 이해할 수 있습니다. 형식이 외환 시장에서 개발되었을 때 고정 스프레드가 우세했고 시장(변동) 스프레드는 여전히 이색적이었습니다. 고정 스프레드조차도 실제로 유동적임이 분명했지만, DC는 보도 자료 및 시장의 급격한 변화 시점에서 고정성을 보장하지 않기 때문에(여기에 인용 부호는 거의 모든 DC의 일반적인 제안에서 인용을 나타냅니다. 기간).
그러나 시대는 변했고 우리는 우리가 가진 것을 가지고 있습니다. 스프레드는 매 틱마다 떠 있습니다. 괜찮습니다. ... 역사적인 인용문에만 반영되지 않습니다. 안타깝게도.
막대당 하나의 스프레드 값만 히스토리에 저장됩니다. 그리고 이것은 지금 충분하지 않습니다. 그리고 브로커가 절대적으로 정직한(틱 피드의 실제 방송에 해당) 역사적 기반을 제공하더라도 실제 거래 내역과 테스터의 거래 내역 사이에 일치가 없기 때문에 백 테스트 시 왜곡이 발생합니다. 그 이유는 MqlRates 형식의 설명력이 부족하기 때문입니다.
이 구조는 막대 내부의 스프레드가 변경되지 않고 현재 거래 현실과 일치하지 않는다고 가정합니다.
"전체" 형식이 될 수 있는 것에 대한 추가 추론. 현재 지원되지 않는다는 것을 분명히 하기 위해 조건부로 "Mql_6_Rates"라는 이름을 지정했습니다.
다음은 두 가지 옵션입니다. 첫 번째는 패킹된 구조(디스크용)입니다. 특별한 알고리즘에 의한 압축 없이. 전송 중 트래픽을 줄이기 위해 여전히 몇 배(2-3, 추정)로 줄일 수 있습니다. 압축 형식은 여기에서 논의되지 않습니다.
"포장" 형식이 거래자의 디스크에 저장될 때 최적인 것으로 가정합니다. 디스크에서 메모리로 로드할 때 즉시 압축을 풀 수 있으며 압축 풀기 기능은 구조에 "첨부"됩니다.
압축을 푼 기록(MQL에서 액세스하기 위한)은 다음과 같을 수 있습니다.
이것은 지금보다 많지만 막대의 모든 고정 지점에서 스프레드를 계산할 수 있습니다. 즉, 전통적인 {Open+High+Low+Close} 방식에 따라 분 막대에 정보를 쓰면 "전체"입니다.
나에게 이 정보는 중복되며 개방 지점에서 최대의 환상을 만드는 경향이 있습니다. 다른 기호의 바 영업 시간은 일치하지 않지만 (천문) 분의 시작 부분에 정확히 기호에 대한 입찰-매도 가격은 마지막으로 인용된 입찰-매도 가격과 정확히 일치합니다. 종가 . 따라서 가장 테스트 가능한 회의록 형식(전통과 상식 간의 가장 건전한 절충안)은 다음과 같습니다.
// 압축된 디스크 형식의 해당 절약은 또 다른 7바이트입니다. SizeOf(Mql_6_PackedRates)는 31바이트로 축소됩니다.
"개봉 가격으로" 환경 친화적인(가장 합리적인) 테스트를 위해서는 천문학적인 시작 시간을 1분으로 잡아야 합니다. 이전 막대의 종가입니다. 이 경우 정확한 다중 통화 가격 동기화가 달성됩니다. 이 동기화는 시장 주문을 거래하는 다중 통화 Expert Advisors를 디버깅하는 데 중요합니다. 거래 제한 및 지정가 주문의 경우 각 막대의 극한값에 대한 정보가 중요합니다. 또한 논의 중인 형식으로 완전히 제시됩니다.
--
사실, 저는 지금 개인적인 목적으로 이러한 형식을 개발하고 있습니다. 여기에 게시하는 것은 내 개발의 부산물일 뿐입니다. 아마도 누군가가 도움이 될 것입니다.
"개봉 가격으로" 환경 친화적인(가장 합리적인) 테스트에서는 천문학적인 시작 시간을 1분으로 잡아야 합니다. 이전 막대의 종가입니다.
갭을 무시하는 것은 어떤 경우에는 중요합니다.
ps 트래픽 절약이 필요한 경우 절대 가격 값 이 아닌 오프셋을 저장할 수 있습니다.
저장된 히스토리(MqlRates)의 형식으로 MetaQuotes는 물론 너무 스마트했습니다(스마트하지 않음). 이것은 이해할 수 있습니다. 형식이 외환 시장에서 개발되었을 때 고정 스프레드가 우세 했지만 시장(변동) 스프레드는 여전히 이색적이었습니다. 고정 스프레드조차도 실제로 유동적임이 분명했지만, DC는 보도 자료 및 시장의 급격한 변화 시점에서 고정성을 보장하지 않기 때문에(여기에 인용 부호는 거의 모든 DC의 일반적인 제안에서 인용을 나타냅니다. 기간).
MT5는 원래 교환 터미널로 위치했습니다. 그리고 거래소에서 ECN 가격 책정 법률은 매우 오래되었습니다. 저것들. 실패에 대한 변명은 참을 수 없습니다. 글쎄요, 그들의 팀에는 들을 수 있는 강력한 알고리즘 트레이더가 없었습니다. 건전한 논리라기 보다는 "플랫폼 개발에 성공한 년수"만이 원칙인 것 같습니다.
나는 정당화하려고 하지 않았다. 정당화하려면 먼저 비난해야 합니다. 그리고 어떻게 든 나는 그것에 맞지 않습니다 .... :)
그런 다음이 겸손 (이것을 조심해야합니다 - 벌거 벗은 비판보다 나쁩니다).
저장된 히스토리(MqlRates)의 형식으로 MetaQuotes는 물론 너무 스마트했습니다(스마트하지 않음). 이것은 이해할 수 있습니다 . 형식이 외환 시장에서 개발되었을 때 고정 스프레드가 우세했고 시장(변동) 스프레드는 여전히 이색적이었습니다. 고정 스프레드조차도 실제로 유동적임이 분명했지만, DC는 보도 자료 및 시장의 급격한 변화 시점에서 고정성을 보장하지 않기 때문에(여기에 인용 부호는 거의 모든 DC의 일반적인 제안에서 인용을 나타냅니다. 기간).
갭을 무시하는 것은 어떤 경우에는 중요합니다.