초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 1426

 
vitaliy zamkovoy 현재 가격에서 20초 전 가격을 빼고 이후 주문 개시에 대한 특정 상수와 비교하면 전문가 조언에 어떻게 작성할 수 있습니까?

이 코드를 보세요:

//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

//ВХОДНОЙ ПАРАМЕТР
input ushort Constanta=50; //Константа

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(20);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
   double open_0=iOpen(_Symbol,PERIOD_CURRENT,0);
   if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
      Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
   if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
      Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
   Sleep(20000);
   if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
      Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
   if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
      Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
   Sleep(20000);
   if(open_0-SymbolInfoDouble(_Symbol,SYMBOL_BID)>Constanta*_Point)
      Print("Цена прошла вниз расстояние больше чем Константа, поэтому нужно открыть позицию SELL!");
   if(SymbolInfoDouble(_Symbol,SYMBOL_BID)-open_0>Constanta*_Point)
      Print("Цена прошла вверх расстояние больше чем Константа, поэтому нужно открыть позицию BUY!");
   Sleep(20000);
  }
//+------------------------------------------------------------------+
안부, 블라디미르.
 
MrBrooklin #:

이 코드를 보세요:

안부, 블라디미르.
안타깝게도 다음 이틀 동안은 확인할 수 없지만 감사의 말씀을 전해주세요!
 
vitaliy zamkovoy #:
안타깝게도 앞으로 이틀 동안은 확인이 불가능할 것 같지만 양해 부탁드립니다!

감사하지만 이것은 준비된 코드가 아니라 제 생각의 방향일 뿐이라는 점에 유의하시기 바랍니다. 틀릴 수도 있습니다. 확인이 필요합니다. 다른 옵션을 고려할 수 있습니다 - OnTimer를 제거하고 OnTick()에서 동일한 코드를 시도해 보세요. 요컨대, 시도해보세요.

안부, 블라디미르.

 
vitaliy zamkovoy 현재 가격에서 20초 전 가격을 가져와서 이후 주문이 개시된 시점과 상수로 비교한다면 어떻게 기록할까요?

현재 가격과 시간을 기록합니다. 각 틱의 현재 시간과 시간을 비교하고, 20초 이상이면 두 번째 가격을 기억하세요. 첫 번째 가격과 두 번째 가격의 차이를 계산합니다. 얻은 결과를 상수와 비교하고 주문을 개시할지 결정합니다.

 
Valeriy Yastremskiy #:

현재 가격과 시간을 기억하세요. 두 번째 가격을 20초 이상 기억하는 경우 각 틱의 현재 시간과 시간을 비교합니다. 첫 번째 가격과 두 번째 가격의 차이를 계산합니다. 얻은 결과를 상수와 비교하고 주문을 개시할지 결정합니다.

이 시리즈의 각 값이 20초 동안 제거될 때 현재 가격과 비교하기 위해 매초마다 현재 가격을 기억해야 한다는 것을 올바르게 이해했나요?

비교는 연속적으로 이루어져야 합니다.

 
vitaliy zamkovoy #:

이 시리즈의 각 값이 20초 동안 삭제될 때 현재 가격과 비교할 수 있도록 매초마다 현재 가격을 기억해야 한다는 점을 올바르게 이해했나요?

비교는 연속적으로 이루어져야 합니다.

틱이 균등하게 이동하지 않으면 문제는 알고리즘에 있으며 모든 틱을 확인해야하는 경우 모든 틱을 기억하고 비교해야합니다. 알고리즘에 따라 덜 자주 가능하다면 타이머와 1 초 후에 가격을 기억하고 20 초 후에도 기억하고 비교합니다. 또는 20초 이내에 모든 가격 또는 가격을 기억하고 새로운 틱과 비교해야 합니다.
1초에 1틱이 있을 수 있고, 5초에 1틱이 있을 수 있으며, 1초에 100틱이 있을 수 있습니다. 5초에 1개의 틱이 있을 때와 1초에 100개의 틱이 있을 때 어떻게 행동할지 결정해야 합니다.

 
Valeriy Yastremskiy #:

틱이 균일하지 않은 경우 문제는 알고리즘에 있으며 모든 틱을 확인해야하는 경우 모든 틱을 기억하고 비교해야합니다. 알고리즘에 따라 빈도를 줄일 수 있다면 타이머를 설정하고 1초 후에 가격을 기억하고 20초 후에도 기억하고 비교합니다. 또는 20초 이내에 모든 가격 또는 가격을 기억하고 새로운 틱과 비교해야 합니다.
1초에 1틱이 있을 수 있고, 5초에 1틱이 있을 수 있으며, 1초에 100틱이 있을 수 있습니다. 5초당 1개의 틱이 있을 때와 1초에 100개의 틱이 있을 때 어떻게 행동할지 결정해야 합니다.

옵션을 선택하는 문제가 아니라 적는 것이 어려운 문제입니다.... 저는 오늘 이 자리에 처음 왔습니다. 저는 완전히 아마추어입니다.

제 아이디어를 시험해보고 싶어서요...

 
vitaliy zamkovoy #:

옵션 선택의 문제가 아니라 적기가 어려운 문제입니다..... 오늘 여기 처음 왔습니다. 완전 아마추어입니다.

제 아이디어를 시험해보고 싶어요.

알고리즘은 정확해야 하고 적용 조건에 대한 이해가 있어야 합니다. 다른 방식으로 코드를 작성할 수 없습니다. 코드는 하나의 동작 알고리즘을 실현하는 것이므로 부정확 할 수 없습니다.

그리고 여기에서 먼저 직접 작성하는 것이 더 좋으며 아마도 실수를 수정할 것입니다.

등호의 부호를 이해하면 많을수록 적습니다.

 

링 버퍼:

"가격, 시간" 구조의 충분히 큰 정적 배열 (또는 두 개의 개별 배열)인 버퍼를 가져옵니다.

버퍼의 머리와 꼬리에 "포인터"(인덱스)라는 두 개의 변수를 사용합니다.

각 틱마다 헤드에 요소를 추가하고 포인터를 전진시킵니다.

필요한 경우 꼬리의 요소와 시간을 비교하고 포인터를 이동합니다.

가격을 꼬리에 있는 요소와 비교합니다.

일부 포인터가 배열의 끝에 도달하면 이 포인터를 0으로 재설정합니다.

 
JRandomTrader 구조의 충분히 큰 정적 배열 (또는 두 개의 개별 배열)인 버퍼를 사용합니다.

버퍼의 머리와 꼬리에 대한 "포인터"(인덱스)라는 두 개의 변수를 가져옵니다.

각 틱마다 헤드에 요소를 추가하고 포인터를 이동합니다.

필요한 경우 꼬리에 있는 요소와 시간을 비교하고 포인터를 이동합니다.

가격을 꼬리에 있는 요소와 비교합니다.

일부 포인터가 배열의 끝에 도달한 경우 이 포인터를 0으로 재설정합니다.

👍
사유: