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

 
Igor Makanu :

https://www.mql5.com/ru/docs/dateandtime/timecurrent 사용

두 번째 함수 호출

일반적으로 https://www.mql5.com/ru/docs/dateandtime/timetostruct 입니다.

소중한 정보 감사합니다.

구조가 무엇이며 어떻게 작동하는지 일반적으로 이해했습니다. 그러나 나는 아직 모든 세부 사항을 완전히 파악하지 못했습니다.

그것과 관련된. 나는 시각적 예를 통해 새로운 자료를 훨씬 더 잘 배웁니다.
mql5에서 다음 조건의 코드를 작성하는 방법을 보여 주시면 매우 감사하겠습니다.
구조체를 사용하여 주문을 여는 방법을 이미 배웠습니다.


if(시()==10)

주문을 엽니다.

샘플 오더 오프닝을 작성할 필요가 없습니다.... 조건만 작성하면 됩니다.

도움을 주셔서 다시 한 번 감사드립니다.

 
Igor Makanu :

아마도 다음과 같이 바의 가격과 시간을 결정하고 싶을 것입니다.

오히려 이들은 차트의 시간 + 가격 값에서 마우스 클릭의 좌표이며 막대는 iBarShift()를 사용하여 결정해야 합니다.

예, 이것이 더 명확합니다. 고맙습니다)

 
ANDREY :

소중한 정보 감사합니다.

구조가 무엇이며 어떻게 작동하는지 일반적으로 이해했습니다. 그러나 나는 아직 모든 세부 사항을 완전히 파악하지 못했습니다.

그것과 관련된. 나는 시각적 예를 통해 새로운 자료를 훨씬 더 잘 배웁니다.
mql5에서 다음 조건의 코드를 작성하는 방법을 보여 주시면 매우 감사하겠습니다.
구조체를 사용하여 주문을 여는 방법을 이미 배웠습니다.


if(시()==10)

주문을 엽니다.

샘플 오더 오프닝을 작성할 필요가 없습니다.... 조건만 작성하면 됩니다.

도움을 주셔서 다시 한 번 감사드립니다.

 MqlDateTime time_now;
TimeCurrent (time_now);
if (time_now.hour== 10 )
{
// открыть ордер
}
 
Igor Makanu :

당신의 도움을 주셔서 대단히 감사합니다. 이제 모든 것이 명확하고 이해할 수 있습니다.

 

모두에게 좋은 하루!
mql4에서 mql5로 전환하려고 합니다. 주문을 여는 간단한 코드를 테스트하기 위해 만들어졌습니다. 주문 테스터의 Expert Advisor가 열립니다. void OnTick() 함수의 시작 부분에 Print() 함수를 배치했습니다.4에서 EA는 모든 틱 에 이 함수를 입력하고 저널의 모든 틱에 인쇄합니다. 그리고 5시에 - 틱 중 어느 것에도 Expert Advisor 가 Print() 함수를 입력하고 저널에 아무 것도 인쇄하지 않습니다. Expert Advisor의 시각화 및 최적화가 비활성화됩니다.
4번처럼 매 틱마다 Print()가 로그에 인쇄되도록 코드를 변경하는 방법을 알려주십시오.
저를 도와주신 모든 분들께 미리 감사드립니다.

여기 내 코드가 있습니다

 input int       StopLoss= 30 ;       // Stop Loss
input int       TakeProfit= 100 ;   // Take Profit
input double    Lot= 0.1 ;           // Количество лотов для торговли
int A;     //

//+------------------------------------------------------------------+
void OnTick ()
  {
Print ( "====================================================" ,   TimeCurrent () )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
 if (! SymbolInfoTick ( _Symbol ,latest_price))
   {
         mrequest.action = TRADE_ACTION_DEAL ;                                   // немедленное исполнение
         mrequest.price = NormalizeDouble (latest_price.bid, _Digits );           // последняя цена Bid
         mrequest.sl = NormalizeDouble (latest_price.ask + StopLoss* _Point , _Digits ); // Stop Loss
         mrequest.tp = NormalizeDouble (latest_price.ask - TakeProfit* _Point , _Digits ); // Take Profit
         mrequest.symbol = _Symbol ;                                             // символ
         mrequest.volume = Lot;                                                 // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL ;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_FOK ;                             // тип исполнения ордера - все или ничего
         mrequest.deviation= 100 ;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend (mrequest,mresult);
    }   
     return ;
  }

Expert Advisor의 예치금을 100,000까지 늘렸고 결과적으로 Print()가 매 틱에 로그에 인쇄되기 시작했습니다.... 그러나 단 한 건의 거래도 열리지 않았습니다.

그리고 두 거래를 열고 Print()를 표시해야 합니다.

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
ANDREY :

모두에게 좋은 하루!
mql4에서 mql5로 전환하려고 합니다. 주문을 여는 간단한 코드를 테스트하기 위해 만들어졌습니다. 주문 테스터의 Expert Advisor가 열립니다. void OnTick() 함수의 시작 부분에 Print() 함수를 배치했습니다.4에서 EA는 모든 틱 에 이 함수를 입력하고 저널의 모든 틱에 인쇄합니다. 그리고 5시에 - 틱 중 어느 것에도 Expert Advisor 가 Print() 함수를 입력하고 저널에 아무 것도 인쇄하지 않습니다. Expert Advisor의 시각화 및 최적화가 비활성화됩니다.
4번처럼 매 틱마다 Print()가 로그에 인쇄되도록 코드를 변경하는 방법을 알려주십시오.
저를 도와주신 모든 분들께 미리 감사드립니다.

여기 내 코드가 있습니다

Expert Advisor의 예치금을 100,000까지 늘렸고 결과적으로 Print()가 매 틱에 로그에 인쇄되기 시작했습니다.... 그러나 단 한 건의 거래도 열리지 않았습니다.

그리고 두 거래를 열고 Print()를 표시해야 합니다.

인쇄 내용에 대한 로그를 살펴보고 각 단계에서 정보가 입력됩니다. 주문을 여는 데 문제가 있고 고문이 작동하지 않을 가능성이 큽니다.

C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\99193835FC75DE8874B99F9A3B93F15E\MQL5\Logs

 
Igor Makanu :

우리는 이미 MQL4에서 터미널 데이터에 여러 번 액세스할 가치가 있는지 여부를 논의한 다음 OrderSelect https://www.mql5.com/en/forum/342989#comment_16743716 에 대해 논의했습니다.

현재 가격을 테스트 할 수도 있습니다. 한 틱에 100500 번 사용할 수도 있다고 생각합니다. 왜냐하면 초당 수백만 번 성능이 될 것입니다.


유일한 것입니다. 예 - 시장 개요 창에 더 많은 기호가 있을수록 터미널 자체가 더 많이 로드되므로 여러 다른 기호에서 데이터를 호출하면 지연도 발생합니다.

저것들. 터미널을 현명하게 사용하면 아무것도 고정되지 않습니다. 시장 개요 창에는 10개의 문자가 있습니다.


한 번에 몇 개의 차트를 열 수 있는지는 확인하지 않았지만, 히스토리가 1000개 막대로 제한되면 터미널에서 문제 없이 수십 개의 차트 창을 끌어올 가능성이 높다고 생각합니다.

100

 
Valeriy Yastremskiy :

인쇄 내용에 대한 로그를 확인하고 각 단계에서 정보가 입력됩니다. 주문을 여는 데 문제가 있고 고문이 작동하지 않을 가능성이 큽니다.

C:\Users\....\AppData\Roaming\MetaQuotes\Terminal\99193835FC75DE8874B99F9A3B93F15E\MQL5\Logs

팁 고마워.

정말 작동하지 않습니다. 씁니다.

2020.10.27 06:40:45.311 시험 장치 EURUSD: 2018.01.02 00:00부터 기록 데이터 시작

2020.10.27 06:40:45.312 코어 1 127.0.0.1:3000에 연결

2020.10.27 06:40:45.312 코어 1 연결된

2020.10.27 06:40:45.320 코어 1 승인됨(에이전트 빌드 2650)

2020.10.27 06:40:45.323 시험 장치 EURUSD,M1(Alpari-MT5-Demo): Experts\GRAIL.ex5 테스트 2020.09.01 00:00 ~ 2020.09.03 00:00

2020.10.27 06:40:45.327 코어 1 공통 동기화 완료

2020.10.27 06:40:45.328 시험 장치 분석된 이력의 품질은 100%입니다.

2020.10.27 06:40:45.348 코어 1 EURUSD의 Expert\GRAIL.ex5 테스트, M1 스레드 완료

2020.10.27 06:40:45.348 코어 1 셧다운 준비

2020.10.27 06:40:45.348 코어 1 로그인(빌드 2650)

2020.10.27 06:40:45.348 코어 1 USD 통화로 계정 정보를 찾았습니다.

2020.10.27 06:40:45.348 코어 1 1482바이트의 테스터 매개변수 로드됨

2020.10.27 06:40:45.348 코어 1 1724바이트의 입력 매개변수 로드됨

2020.10.27 06:40:45.348 코어 1 핍으로 이익 계산, 초기 예치금 10000, 레버리지 1:100

2020.10.27 06:40:45.348 코어 1 성공적으로 초기화

2020.10.27 06:40:45.348 코어 1 총 731바이트의 초기화 데이터 수신

2020.10.27 06:40:45.348 코어 1 인텔 코어 i5-6400 @ 2.70GHz, 7883MB

2020.10.27 06:40:45.348 코어 1 EURUSD: 동기화할 기호

2020.10.27 06:40:45.348 코어 1 EURUSD: 이미 동기화된 기호, 18바이트 수신

2020.10.27 06:40:45.348 코어 1 EURUSD,M1: 2019.01.02 06:00부터 캐시된 기록

2020.10.27 06:40:45.348 코어 1 EURUSD,M1(Alpari-MT5-Demo): 모든 틱 생성

2020.10.27 06:40:45.348 코어 1 EURUSD,M1: 2020.09.01 00:00부터 2020.09.03 00:00까지 Experts\GRAIL.ex5 테스트 시작: 입력:

2020.10.27 06:40:45.348 코어 1 손절매=30

2020.10.27 06:40:45.348 코어 1 테이크프로핏=100

2020.10.27 06:40:45.348 코어 1 로트=0.1

2020.10.27 06:40:45.348 코어 1 최종 잔액 10000.00핍

2020.10.27 06:40:45.348 코어 1 EURUSD,M1: 111967틱, 2880바 생성. 0:00:00.019에 테스트를 통과했습니다.

2020.10.27 06:40:45.348 Core 1 270Mb 메모리 사용(35Mb의 히스토리 데이터, 64Mb의 틱 데이터 포함)

2020.10.27 06:40:45.348 코어 1 "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\20201027.log" 로그 파일 작성

2020.10.27 06:40:45.371 코어 1 연결 닫힘

하루 동안 테스트를 하고 있습니다. 즉, 고문은 1440 주문을 열어야 합니다. 그게 문제일 수도 있어요. 동시 오픈 주문 수에 제한이 있을 수 있습니다.
결국, 고문의 보증금이 10,000일 때 그는 300개의 주문만 열었고 나머지는 돈 문제로 인해 놓쳤습니다(일지 항목에서 이해). 그리고 나서 고문의 보증금을 100,000으로 늘렸고 그는 더 이상 놓칠 권리가 없었습니다. 그리고 그는 주문 개시를 완전히 중단했습니다.

그런데 다시 Advisor의 예치금을 10,000으로 줄였는데도 불구하고 Advisor는 아무 것도 열지 않고 항상 위에 표시한 내용을 작성합니다.

다른 고문을 만들었습니다. 동일한 코드를 업로드했습니다. 보증금 10,000 모든 것이 동일합니다 - 주문을 열지 않습니다.
Advisor를 정상적으로 작동시키는 방법을 알려주세요. 동일한 것을 씁니다. 강조 표시된 노란색 줄에만 270mb 대신 값이 271입니다.
나는 윈도우 10이 있습니다. 64비트 OS 8GB RAM.
고맙습니다.

 
ANDREY :

팁 고마워.

정말 작동하지 않습니다. 씁니다.


2020.10.27 06:40:45.348 코어 1 EURUSD,M1: 111967틱, 2880바 생성. 0:00:00.019에 테스트를 통과했습니다.

2020.10.27 06:40:45.348 Core 1 270Mb 메모리 사용(35Mb의 히스토리 데이터, 64Mb의 틱 데이터 포함)

2020.10.27 06:40:45.348 코어 1 "C:\Users\a1960\AppData\Roaming\MetaQuotes\Tester\36A64B8C79A6163D85E6173B54096685\Agent-127.0.0.1-3000\logs\20201027.log" 로그 파일 작성

2020.10.27 06:40:45.371 코어 1 연결 닫힘

하루 동안 테스트를 하고 있습니다. 즉, 고문은 1440 주문을 열어야 합니다. 그게 문제일 수도 있어요. 동시 오픈 주문 수에 제한이 있을 수 있습니다.
결국, 고문의 보증금이 10,000일 때 그는 300개의 주문만 열었고 나머지는 돈 문제로 인해 놓쳤습니다(일지 항목에서 이해). 그리고 나서 고문의 보증금을 100,000으로 늘렸고 그는 더 이상 놓칠 권리가 없었습니다. 그리고 그는 주문 개시를 완전히 중단했습니다.

그런데 다시 Advisor의 예치금을 10,000으로 줄였는데도 불구하고 Advisor는 아무 것도 열지 않고 항상 위에 표시한 내용을 작성합니다.
Advisor를 정상적으로 작동시키는 방법을 알려주세요.
고맙습니다.

하루에 1440개의 주문이 있는 경우 1분의 시작 또는 더 간단하게는 분 표시줄의 모양에 대한 확인이 있어야 합니다. 그리고 이 순간에 열립니다. 당신은 그것을 가지고 있지 않으므로 고문은 현재 견적에서 우리 기호의 조건에 따라 그 자체로 힘든 조건인 각 틱에 대한 포지션을 엽니다. 이 조건은 충족되거나 충족되지 않을 수 있으며 틱은 건너뜁니다. 그리고 어느 시점에서 치명적인 오류가 발생합니다.

또한, 주문 실행 의 유형(주문을 체결하여 포지션을 생성) All or nothing.

 input int       StopLoss= 30 ;       // Stop Loss
input int       TakeProfit= 100 ;   // Take Profit
input double    Lot= 0.1 ;           // Количество лотов для торговли
int A;     //

//+------------------------------------------------------------------+
void OnTick ()
  {
Print ( "====================================================" ,   TimeCurrent () )   ;
//--- Объявляем структуры, которые будут использоваться для торговли
   MqlTick latest_price;       // Будет использоваться для текущих котировок
   MqlTradeRequest mrequest;   // Будет использоваться для отсылки торговых запросов
   MqlTradeResult mresult;     // Будет использоваться для получения результатов выполнения торговых запросов
 if (! SymbolInfoTick ( _Symbol ,latest_price))
   {
         mrequest.action = TRADE_ACTION_DEAL ;                                   // немедленное исполнение
         mrequest.price = NormalizeDouble (latest_price.bid, _Digits );           // последняя цена Bid
         mrequest.sl = NormalizeDouble (latest_price.ask + StopLoss* _Point , _Digits ); // Stop Loss
         mrequest.tp = NormalizeDouble (latest_price.ask - TakeProfit* _Point , _Digits ); // Take Profit
         mrequest.symbol = _Symbol ;                                             // символ
         mrequest.volume = Lot;                                                 // количество лотов для торговли
         mrequest.type= ORDER_TYPE_SELL ;                                       // ордер на продажу
         mrequest.type_filling = ORDER_FILLING_FOK ;                             // тип исполнения ордера - все или ничего
         mrequest.deviation= 100 ;                                               // проскальзывание от текущей цены
         //--- отсылаем ордер
     OrderSend (mrequest,mresult); // получите (запросите) результаты исполнения / сделки и распечатайте, будет понятней
    }   
     return ;
  }
 
int M = TimeMinute( TimeCurrent ());
int TimeServer()                                                  
{  
   Print (M, " - Tекущее время сервера" );
}

말해주세요!

새 틱이 도착할 때 서버 시간이 업데이트되지 않는 이유는 무엇입니까?

어드바이저를 시작하는 순간 모든 것이 제대로 작동하지만 시간이 흐르고 현재 분의 새 값이 변수에 입력되지 않습니다.

저것들. 내 조언자는 변수 int M = TimeMinute(TimeCurrent())에 의해 수신된 숫자에 따라 작동합니다.

실제로 코드 라인은 참고서에서 가져온 것이며 작동하지도 않습니다.

예를 들어 12분 만에 실행 -  현재 시간   서버에서 반환된 시간은 변수의 시간에 해당하며 시계에서는 이미 15-20분이지만 변수는 12로 유지됩니다.

Документация по MQL5: Дата и время / TimeCurrent
Документация по MQL5: Дата и время / TimeCurrent
  • www.mql5.com
Возвращает последнее известное время сервера, время прихода последней котировки по одному из выбранных в "Обзоре рынка" символов. В обработчике OnTick() данная функция вернет время пришедшего обрабатываемого тика. В других случаях (например, вызов в обработчиках OnInit(), OnDeinit(), OnTimer() и так далее) это –...