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

 
Valeriy Yastremskiy :

이것은 이해할 수 있지만 불행히도 mql5는 즉시 이해하기 어렵습니다. 나는 fxsaber에 동의합니다. 4k가 더 쉽다고 생각하지만 최적화 및 기타 장점을 위해 어드바이저를 5k로 끕니다. 일반적으로 OOP 연습 없이 mql5를 즉시 마스터할 사람이 있는지 알고 싶습니다. 물론 C ++ 4 이후에는 관련이 없지만 내가 틀릴 수도 있습니다.

완전히 동일한 두 언어. 그 이상도 이하도 아닌. 그리고 OOP(모두가 두려워했던)는 둘 다에서 정확히 동일합니다. 몰랐다? 인터넷에서 공포 이야기를 읽었고 YouTube에서 "합리적이며 영원한" 블로거를 충분히 보았습니까? 이는 현명하게 헛소리를 말하고 의도적으로 사람들을 MQL5에서 멀어지게 하는 것입니다.

나는 실망하기 위해 서두릅니다. 두 언어는 정확히 동일합니다. 이해의 용이성과 OOP의 가능성 및 가용성 측면에서 모두.
사실, MQL5에는 더 많은 기회가 있습니다.

 
Alexey Viktorov :

나는 당신에게 스페인 사람을 보냈습니다 - 글쎄, 무서워. 그를 지표로 만드십시오 - 시간이 없습니다. 영어로 씁니다. 그렇다면 설명하겠습니다. 하지만 .. 당신이 스스로 알아낼 것입니다.

 
Alexey Viktorov :

Artyom의 대답은 기억나지 않고, 찾아보지도 않고 그가 대답할 수 있을 거라고 생각합니다. 그의 기사에는 이에 필요한 모든 기능이 있으며 그의 기사에 있는 모든 코드는 mql5 및 mql4용 다중 터미널 또는 두 가지 버전입니다. mql4에서 이러한 옵션을 확인했는데 모든 것이 "강타"로 작동하고 스톱 또는 테이크에 의해 닫히며 실수를 하지 않습니다.

예, 이러한 기사를 이해하기 어렵지만 저보다 나이가 많지 않다면 그만한 가치가 있습니다. 그리고 나에게 프로그래머에게는 과분할 정도로 많다.

다른 옵션은 더 간단하지만 훨씬 느리게 작동합니다. 배열에 주문 티켓을 쓰고 이 배열을 사용하여 주문을 선택하고 주문 마감 시간을 확인합니다. 0보다 크면 닫힙니다. 이 닫힌 주문의 주석에 "sl"문자가 있으면 주문이 중지됩니다. 또한 주문이 마감되면 배열에서 삭제합니다. 또는 전체 어레이를 통과한 후 나머지 미결 주문으로 다시 채웁니다. 대체로, 공상의 비행...

어떤 옵션을 선택할지는 귀하에게 달려 있습니다. 그리고 Kovalev의 교과서에 대한 몇 가지 게시물을 읽으십시오. 튜토리얼에서 int start()를 작성하도록 제안한 반면, 조언자를 위해 업데이트된 mql4에서는 void OnTick()을 작성해야 합니다.

표시기 및 스크립트에 대해서는 설명서를 참조하십시오. 그건 그렇고, 업데이트된 mql4에서 표시기를 작성하는 것은 Sergey가 이 튜토리얼을 작성할 때보다 훨씬 쉽습니다.

정말 감사합니다. 당신의 정보는 나에게 매우 귀중했습니다. 특히 start() 함수에 대해

 
Alexey Viktorov :

Artyom의 대답은 기억나지 않고, 찾아보지도 않고 그가 대답할 수 있을 거라고 생각합니다. ...

여기 내 대답이 있습니다. 수행해야 할 작업에 대한 명확한 지침:

주문 및 위치 수 를 추적하고 이전 상태와 비교해야 합니다. 마지막 틱에 12개의 위치가 있고 현재 틱에 8개가 있는 경우 4개의 위치가 변경됩니다. 따라서, 그들에게 무슨 일이 일어났는지 이해하기 위해 마지막 4개 포지션(종료 시간 기준)을 취해야 합니다.

그러나 "기적"이 쓰여진 첨부 코드로 판단하면 정말 말로 설명 할 필요가 없습니다. 그러나 여기에서 그들은 도움을 주며 for / for를 쓰지 않습니다.


 
ANDREY :

정말 감사합니다. 당신의 정보는 나에게 매우 귀중했습니다. 특히 start() 함수에 대해

우리는 편집기에서 필요한 것을 생성하고 고문, 스크립트, 표시기 및 편집기는 올바른 필드가 있는 템플릿을 생성합니다.
 
Artyom Trishkin :

엄격하게 지정된 시간에 각각 두 개의 판매 위치를 열고 허용되는 마지막 위치의 시작 시간을 인쇄하는 것 외에 코드는 실제로 무엇을 합니까? 모든 것. 동시에 코드 동작에서 "기적"으로 이어질 수 있는 초기화되지 않은 변수와 수년간의 거미줄이 있는 먼지가 많은 선반에서 꺼낸 아주 아주 오래된 start() 핸들러를 사용하여 고대 핸들러가 있는 시장(언젠가는 무언가를 팔고 싶을 때)은 유효성 검사기를 절대 놓치지 않을 것입니다. 프로그램 유형이 잘못되었다는 반복 메시지가 표시됩니다.

참여해주셔서 감사합니다. 영국 파운드-미국 달러 쌍에서 테스트 중 가격 행동에서 하나의 패턴을 발견했습니다. 작은 수정과 작은 손실이 있는 이 패턴으로 대차 대조표는 2008년부터 현재까지 지속적으로 상승했습니다. 내가 말했듯이 대차 대조표와 드로다운의 수정은 작지만 시간이 몇 개월 동안 길며 다른 쌍에서는 이 패턴이 뚜렷하지만 파운드-달러만큼 명확하지 않습니다.
나는 이 패턴의 다양한 변형을 테스트하기 시작했고 이 목적을 위해 최적화에 의존했습니다. 그러나 밝혀진 바와 같이 한 번에 여러 매개변수에 의한 최적화에는 엄청난 시간이 걸립니다. 제 경우에는 약 1년. 유전자 알고리즘 은 나에게 적합하지 않습니다.
그러다가 올바르게 구성된 코드, Print() 함수 및 Excel 스프레드시트의 도움으로 더 빠르게 테스트하고 최적화할 수 있다는 생각이 들었습니다.

아래 코드는 그러한 코드를 작성하려는 시도일 뿐입니다. 앞으로 이 코드를 계속 수정하겠습니다. 하지만 지금은 해결할 지식이 없는 문제에 직면해 있습니다.
저를 판단하지 마십시오. 제 코드는 매우 가혹합니다.... 저는 코딩의 기초와 그 이상을 이해하기 시작한 초보자입니다. 하지만 나는 비판을 냉정하게 받아들이고 화를 내지 않는다..... 특히 건설적이다.

도와 주셔서 감사합니다.

 int s1,Mn,a,CH;
double Hay,Lou=Bid,Nm_PL[ 700 ]={ 0 },PrS,DL= 0.0030 ,X;
int start()
{
int ot = OrdersTotal ();                                         
int Ht = OrdersHistoryTotal();
////******************************************************************
if ( OrderSelect (Ht- 1 ,SELECT_BY_POS, MODE_HISTORY))                                             
if (X!=OrderTicket( ))
{
Mn=OrderMagicNumber();CH=TimeHour(OrderOpenTime());PrS=OrderProfit( );Nm_PL[CH+Mn* 24 ]=Nm_PL[CH+Mn* 24 ]+PrS;
Print ( "----------------- ПРОФИТ-----------------------=" ,CH, "    Ном орд.(1-26)   " ,Mn, " ТП    " ,PrS, " ФИН.РЕЗУЛЬТ.   " ,Nm_PL[CH+Mn* 24 ], " НОМ. ИНДЕКСА   " ,Mn* 24 );X=OrderTicket();
}
////******************************************************************
if (Bid < Lou)
{
Lou=Bid;
}
//=======================
if (Bid > Hay)
{
Hay=Bid;
}
////=======================
if (Bid - Lou > DL&& Lou!= 0 )
{
for ( int c= 0 ; c<= 500 ;c+= 20 ) 
{
a++;
OrderSend ( Symbol (),OP_SELL, 0.1 ,Bid, 3 ,Ask+ 0.0030 +c* Point ,Ask- 0.0010 -c* Point , "300" ,a );
}
Lou=Bid;
Hay=Bid;
a= 0 ;
s1= 0 ;
}
return ( 0 );
}

두 개 이상의 주문이 동일한 틱에서 stop 또는 take로 마감된 경우 프로그램은 이 틱에서 마지막 주문이 마감된 후에만 Print()를 인쇄합니다. 그리고 닫힌 주문마다 Print()가 필요합니다. 나는 이것을 달성하는 방법을 모른다. 그러나 올바른 코드를 본다면 즉시 모든 것을 이해하고 기억할 것입니다.

아래는 내 문제의 예입니다


Генетические алгоритмы - это просто!
Генетические алгоритмы - это просто!
  • www.mql5.com
Введение Генетический алгоритм (ГА) относится к эвристическим алгоритмам (ЭА), который даёт приемлемое решение задачи в большинстве практически значимых случаев, однако при этом правильность решения математически не доказана и применяют чаще всего для задач, аналитическое решение которых весьма затруднительно или вовсе невозможно. Классическим...
 
Valeriy Yastremskiy :
우리는 편집기에서 필요한 것을 생성하고 고문, 스크립트, 표시기 및 편집기는 올바른 필드가 있는 템플릿을 생성합니다.

네. 나는 이러한 올바른 필드, 즉 START 대신 새로운 기능에 주의를 기울이고 있었습니다. 그러나 그는 그것들에 어떤 중요성도 부여하지 않았고 여전히 테스트를 위해 START를 사용했습니다.
최신 MQL4 업데이트에 대한 자세한 내용을 어디에서 읽을 수 있는지 알고 있습니까?그렇지 않으면 도처에 많은 정보가 있고 올바른 정보를 찾기가 매우 어렵습니다. 가끔 어디를 봐야할지 모를 때도 있는데, Kovalev의 교과서는 모든 정보가 논리적으로 구조화되어 있어 쉽고 빠르게 뇌에 들어 오기 때문에 정말 좋아합니다. 그리고 필요한 모든 미묘함을 이해할 수 있을 만큼 충분히 상세합니다. 왜 그가 MQL5에 대한 튜토리얼도 작성하지 않는지 궁금합니다.

 
Artyom Trishkin :

완전히 동일한 두 언어. 그 이상도 이하도 아닌. 그리고 OOP(모두가 두려워했던)는 둘 다에서 정확히 동일합니다. 몰랐다? 인터넷에서 공포 이야기를 읽었고 YouTube에서 "합리적이며 영원한" 블로거를 충분히 보았습니까? 이는 현명하게 헛소리를 말하고 의도적으로 사람들을 MQL5에서 멀어지게 하는 것입니다.

나는 실망하기 위해 서두릅니다. 두 언어는 정확히 동일합니다. 이해의 용이성과 OOP의 가능성 및 가용성 측면에서 모두.
사실, MQL5에는 더 많은 기회가 있습니다.

예, 일반적으로 동의합니다. 4k의 OOP는 기쁩니다)))) 초보자의 경험에 따르면 4k의 Kovalev, Zhdan 교과서 및 5k 및 OOP의 이해할 수 없는 Mishin의 교과서입니다. 그를 이해하는 방법을 모르겠습니다. 얼마나 많은 사람들이 캡슐화를 반복하지 않으면 다형성에 대한 이해가 오지 않을 것입니다. 그리고 무엇을 먼저 읽어야 할지 모르는 기사. 그리고 찾을 곳. 따라서 시작 기능의 종료는 여전히 ontik의 코드베이스에서 찾을 수 있습니다.)))))
 
ANDREY :

네. 나는 이러한 올바른 필드, 즉 START 대신 새로운 기능에 주의를 기울이고 있었습니다. 그러나 그는 그것들에 어떤 중요성도 부여하지 않았고 여전히 테스트를 위해 START를 사용했습니다.
최신 MQL4 업데이트에 대한 자세한 내용을 어디에서 읽을 수 있는지 알고 있습니까?그렇지 않으면 도처에 많은 정보가 있고 올바른 정보를 찾기가 매우 어렵습니다. 가끔 어디를 봐야할지 모를 때도 있는데, Kovalev의 교과서는 모든 정보가 논리적으로 구조화되어 있어 쉽고 빠르게 뇌에 들어 오기 때문에 정말 좋아합니다. 그리고 필요한 모든 미묘함을 이해할 수 있을 만큼 충분히 상세합니다. 왜 그가 MQL5에 대한 튜토리얼도 작성하지 않는지 궁금합니다.

Alexey Viktorov 가 말했듯이: mql5는 OrderSend() 함수와 내가 기억하지 못하는 몇 가지 함수에서만 mql4와 다르다는 사실을 이해하십시오. 또 다른 중요한 차이점은 인덱싱 표시기 버퍼 의 방향입니다 . 그러나 이것은 혁신에 익숙해지는 것이 더 좋지만 핀치로 해결됩니다. 그리고 지표 값을 얻는 것은 동일하게 유지됩니다.
초보자를 위한 OOP에 대한 기사가 도움이 되었습니다. 그리고 편집자의 메모.
 
ANDREY :

참여해주셔서 감사합니다.

...

아래 코드는 그러한 코드를 작성하려는 시도일 뿐입니다. 앞으로 이 코드를 계속 수정하겠습니다. 하지만 지금은 해결할 지식이 없는 문제에 직면해 있습니다.
저를 판단하지 마십시오. 제 코드는 매우 가혹합니다.... 저는 코딩의 기초와 그 이상을 이해하기 시작한 초보자입니다. 하지만 나는 비판을 냉정하게 받아들이고 화를 내지 않는다..... 특히 건설적이다.

도와 주셔서 감사합니다.

두 개 이상의 주문이 동일한 틱에서 stop 또는 take로 마감된 경우 프로그램은 이 틱에서 마지막 주문이 마감된 후에만 Print()를 인쇄합니다. 그리고 각각의 마감된 주문 후에 Print()가 필요합니다. 나는 이것을 달성하는 방법을 모른다. 그러나 올바른 코드를 본다면 즉시 모든 것을 이해하고 기억할 것입니다.

아래는 내 문제의 예입니다


나는 이미 당신에게 대답했습니다:

말로 설명: 주문 및 위치 수 를 추적하고 이전 상태와 비교해야 합니다. 마지막 틱에 12개의 위치가 있고 현재 틱에 8개가 있는 경우 4개의 위치가 변경됩니다. 따라서, 그들에게 무슨 일이 일어났는지 이해하기 위해 마지막 4개 포지션(종료 시간 기준)을 취해야 합니다.

목록의 마지막 주문을 받습니다.

 int Ht = OrdersHistoryTotal();
////******************************************************************
if ( OrderSelect (Ht- 1 ,SELECT_BY_POS, MODE_HISTORY))

그리고 먼저 주문 목록에서 상태가 얼마나 변경되었는지 알아야 합니다. 12에서 8이 되어 4주문으로 바뀌었습니다. 따라서 네 가지 주문을 모두 인쇄해야 합니다. 그리고 항상 목록의 마지막 항목만 인쇄합니다.

얼마나 변했는지 어떻게 알 수 있습니까? 어드바이저를 시작할 때 변수에 주문 수를 기록해야 합니다(예: int last_total). 그런 다음 각 틱에서 OrdersTotal()을 last_total과 비교합니다. 동일하지 않으면 변경이 발생한 것입니다. OrdersTotal()과 last_total의 차이를 num_changes와 같은 변수에 쓰고 OrdersTotal()의 새로운 상태를 last_total에 저장합니다.
예를 들어 보류 중인 주문이 트리거될 때 여기에 뉘앙스가 있을 수 있습니다. 그러나 지금은 시작하는 데 필요한 작업을 수행합니다.
누락된 주문의 수를 알면 내역에서 확인할 수 있습니다. 그러나 과거 목록에서 주문을 통제하는 것만으로 제한할 수 있습니다. 시장 목록이 아니라 과거 주문 목록에 대해 위에서 설명한 모든 작업을 수행하십시오. 과거와 현재의 차이는 분석해야 하는 주문의 수입니다. 항상 목록의 마지막 항목만 분석합니다.

동시에 기록 목록의 마지막 주문이 마감된 마지막 주문이 될 것이라는 보장은 없습니다. 이것들은 또한 고려해야 할 뉘앙스입니다. 하지만.