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

 
Valeriy Yastremskiy #:

알고리즘은 정확해야 하며, 적용 조건에 대한 이해가 있어야 합니다. 그렇지 않으면 코드를 작성할 수 없습니다. 코드는 하나의 동작 알고리즘을 구현하는 것이므로 부정확할 수 없습니다.

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

당신은 등호의 표시를 이해하고 더 많은 것이 적습니다.

안녕하세요, 발레리! 나는 당신과 전적으로 동의합니다. 올바른 코드를 작성하려면 포지션을 열기 위한 정확한 조건이 필요합니다. 이 코드도 작동합니다:

//+------------------------------------------------------------------+
//|                                                         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()
  {
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  }
//+------------------------------------------------------------------+
//| Tick function                                                    |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   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);
  }
//+------------------------------------------------------------------+

하지만 문제는 비탈리가 의도한 대로 작동해야 하는가 하는 것입니다. 솔직히 말해서 20초에 한 번 (또는 10초, 5초 또는 1초에 한 번) 가격 차이를 확인해야 하는 이유를 잘 모르겠습니다. 향후 가격 움직임의 방향을 결정하는 데 어떤 도움이 될까요?

감사합니다, 블라디미르.

 
MrBrooklin #:

안녕하세요, 발레리! 저도 전적으로 동의합니다. 올바른 코드를 작성하려면 포지션을 열기 위한 정확한 조건이 필요합니다. 이 코드도 작동합니다:

하지만 문제는 비탈리가 의도한 대로 작동해야 하는가 하는 것입니다. 솔직히 말해서 20초에 한 번 (또는 10초, 5초 또는 1초에 한 번) 가격 차이를 확인해야 하는 이유를 잘 모르겠습니다. 향후 가격 움직임의 방향을 결정하는 데 어떤 도움이 될까요?

감사합니다, 블라디미르.

미스터브룩린 #:

안녕하세요, 발레리! 저도 전적으로 동의합니다. 올바른 코드를 작성하려면 포지션을 열기 위한 정확한 조건이 필요합니다. 이 코드도 작동합니다:

하지만 문제는 비탈리가 의도한 대로 작동해야 하는가 하는 것입니다. 솔직히 말해서 20초에 한 번 (또는 10초, 5초 또는 1초에 한 번) 가격 차이를 확인해야 하는 이유를 잘 모르겠습니다. 향후 가격 움직임의 방향을 결정하는 데 어떤 도움이 될까요?

감사합니다, 블라디미르.

작업을 잘못 설명하셨습니다! "20초에 한 번"이 아니라 얼마 전에 지나간 지표를 매초마다 확인하는 것입니다. "왜"에 관해서는이 토론의 질문이 아닙니다. (그리고 20초는 단지 예시일 뿐입니다).

첫 번째 캔들을 두 번째 캔들과 비교하는 이동평균과 같습니다. 현재 (0) 분 캔들 내부의 모든 것을 계산해야 합니다. (또는 더 나은 방법은 꺾은선형 차트에서 계산하는 것입니다. 결국 첫 번째 캔들까지 20초가 흐를 수 있습니다).

 
vitaliy zamkovoy #:
작업을 올바르게 설명하지 않았습니다! "20초에 한 번"이 아니라 얼마 전에 지나간 값을 확인하는 것은 매초마다입니다. "왜"에 관해서는 이 토론의 질문이 아닙니다. (그리고 20초는 단지 예시일 뿐입니다).

예, 실수입니다. 수행 / 확인하려는 작업을 완전히 이해하지 못했습니다.

안부 전해주세요, 블라디미르.

 

하지만 상수와 같은 거리를 짝수 초가 아닌 10.964초 또는 11.283초 동안 이동했다면 어떻게 될까요? 조건이 충족될까요, 그렇지 않을까요?

안녕하세요, 블라디미르.

 
MrBrooklin #:

하지만 상수와 같은 거리를 짝수 초가 아닌 10.964초 또는 11.283초 안에 이동하면 어떻게 될까요? 조건이 충족될까요, 충족되지 않을까요?

감사합니다, 블라디미르.

"상수와의 비교"라는 용어는 평등을 의미하는 것이 아니라 "더 많음" "적음"을 의미합니다. 양수 차이의 경우 + 부호를 사용하여 상수와 비교하고 음수 차이의 경우 " - " 부호를 사용하여 상수와 비교합니다. 첫 번째 경우 상수를 초과하면 매수합니다. 두 번째 경우에는 값이 더 적으면 판매합니다.
 
vitaliy zamkovoy #:
"상수와의 비교"라는 용어에서 나는 평등을 의미하는 것이 아니라 "더" "덜"을 의미합니다.

이제 모든 것이 명확합니다.

안부, 블라디미르.

 
MrBrooklin #:

이제 모든 것이 이해가 됩니다.

안부 전해주세요, 블라디미르

메시지를 업데이트했습니다. 다시 읽어주세요.
 

이 말도 안 되는 글을 읽는 데 정말 지쳤습니다... 결국 코드는 네 줄에 불과하고 토론 내용은 3페이지에 달합니다.

  MqlTick mqlTick[], symbTick; // объявили переменные
  SymbolInfoTick(_Symbol, symbTick); // это последний тик
  CopyTicksRange(_Symbol, mqlTick, COPY_TICKS_ALL, symbTick.time_msc, symbTick.time_msc-20000); // Получили все тики за последние 20 секунд
  double delta = NormalizeDouble(mqlTick[ArraySize(mqlTick)-1].bid-mqlTick[0].bid, _Digits); // получили разницу крайних значений массива

20,000 밀리초는 20초입니다.

다음으로 델타 변수의 크기에 더/더 작음, 왼쪽/오른쪽 또는 북쪽/북쪽이라는 조건을 붙이세요....

 
MrBrooklin #:

이제 모든 것이 이해가 됩니다.

안부 전해주세요, 블라디미르

미스터브룩린 #:

이제 모든 것이 이해가 됩니다.

안부 전해주세요, 블라디미르.

비탈리 잠코보이 #:
메시지를 업데이트했습니다. 다시 읽어주세요.
알렉세이 빅토로프는 속물이지만 한 번에 트릭을 깨달았습니다. 😆
 
vitaliy zamkovoy #:
"상수와의 비교"라는 용어는 평등을 의미하는 것이 아니라 "더 많이" "적게"를 의미합니다. 차이가 양수이면 + 부호가 있는 상수와 비교하고, 차이가 음수이면 - 부호가 있는 상수와 비교합니다. 첫 번째 경우 상수를 초과하면 매수합니다. 두 번째 경우에는 값이 적으면 판매합니다.

이제 모든 것이 명확합니다.

안부, 블라디미르.

추신 내가 추천 할 수있는 유일한 것은 관심을 위해 여기에서 내 메시지를 보는 것입니다. 그리고이 메시지 이후에 가격이 어떻게 행동했는지보십시오. 가격 차트 스크린샷의 빨간색 화살표와 같이 0.98000, 더 정확하게는 0.9806까지 하락했다가 다시 상승했습니다. 이 권장 사항은 참고용입니다.

사유: