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

 
Aleksey Vyazmikin :

이 문제를 해결하는 데 도움을 요청합니다.

현재 시간 프레임이 M1이라고 가정하고 상위 TF의 주어진 막대의 마지막 막대 N의 시간을 알아야 하지만 시간은 60분이 아니라 45분 또는 다른 시간일 수 있습니다. 주말이지만 현재 TF의 마지막 막대에 대한 TF 날짜를 알아야 합니다.

그것을 구현하는 방법?

막대 번호, 기호 이름 및 원하는 기간을 지정합니다.

 //+------------------------------------------------------------------+ 
//| Get Time for specified bar index                                 | 
//+------------------------------------------------------------------+ 
datetime iTime ( const int index, string symbol= NULL , ENUM_TIMEFRAMES timeframe= PERIOD_CURRENT )
  {
   if (symbol== NULL )
      symbol= Symbol ();
   if (timeframe== 0 )
      timeframe= Period ();
   datetime Time [ 1 ];
   datetime time= 0 ; // datetime "0" -> D'1970.01.01 00:00:00'
   int copied= CopyTime (symbol,timeframe,index, 1 , Time );
   if (copied> 0 )
      time= Time [ 0 ];
   return (time);
  }

확인(만일을 대비하여) - 함수가 D'1970.01.01 00:00:00' 시간을 반환하면 - 오류를 의미합니다.

 

매도주문이 들어오지 않는 문제가 발생했습니다

2018.05.23 12:07:55.002 Trades  '50250084': market sell 0.01 EURUSD tp: 1.17397
2018.05.23 12:07:55.112 Trades  '50250084': accepted market sell 0.01 EURUSD tp: 1.17397
2018.05.23 12:07:55.113 Trades  '50250084': market sell 0.01 EURUSD tp: 1.17397 placed for execution
2018.05.23 12:07:55.114 Trades  '50250084': rejected market sell 0.01 EURUSD tp: 1.17397 (rejected)

브로커가 주문을 수락했다가 거부했다는 사실을 정확히 이해하고 있습니까?

그때 무슨 근거로 그리고 왜 쓰지 않았습니까? 로그에 더 이상 오류가 없습니다. 이 오류가 발생하기 전에는 50개 이상의 주문이 있었고 모두 오류가 없었습니다. 이 오류 후에도 오류가 표시되지 않습니다.

이 문제를 없앨 수 있습니까?

 
Vladimir Karputov :

막대 번호, 기호 이름 및 원하는 기간을 지정합니다.

확인(만일을 대비하여) - 함수가 D'1970.01.01 00:00:00' 시간을 반환하면 - 오류를 의미합니다.

이 기능을 사용하는데, 제안한 것보다 더 좋지 않습니까?

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
datetime iTime ( string symbol, int tf, int index)
  {
   if (index < 0 ) return (- 1 );
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[];
   if ( CopyTime (symbol,timeframe,index, 1 ,Arr)> 0 )
       return (Arr[ 0 ]);
   else return (- 1 );
  }

문제는 내 현재 시간대가 1분이면 선택한 시간대에서 현재 시간대의 마지막 막대 번호를 알고 싶지만 많은 시간이 흘렀다는 것입니다(주말로 인한 갭이나 저녁 세션은 23-50에 닫고 다음 세션은 10-00에만 열립니다), 그러면 23:49:00이 아니라 09:59가 반환됩니다. 이렇게 시간을 요청합니다.

 datetime          StopDt= iTime ( Symbol (),TF_iDeltaP,_Shift-1)- 60 ;

따라서 시간 프레임의 조합으로 마지막 막대의 이 시간을 얻는 방법에 대한 질문이 생겼습니다.

 
Aleksey Vyazmikin :

...

문제는 내 현재 시간대가 1분이면 선택한 시간대에서 현재 시간대의 마지막 막대의 숫자 를 알고 싶고, ...

강조 표시된 문구에 뇌가 폭발했습니다.

 
Vladimir Karputov :

강조 표시된 문구에 뇌가 폭발했습니다.

오타가 있습니다. 상위 시간대의 선택된 막대를 참조하는 현재 시간대의 마지막 막대 날짜가 필요합니다.

이제 명확합니까?
 
Aleksey Vyazmikin :

오타가 있습니다. 상위 시간대의 선택된 막대를 참조하는 현재 시간대의 마지막 막대 날짜가 필요합니다.

이제 명확합니까?

아니오, 명확하지 않습니다. 두뇌는 계속 끓고 폭발합니다 :). 하나의 막대는 자체 시간대에만 속합니다.

 
Aleksey Vyazmikin :

오타가 있습니다. 상위 시간대의 선택된 막대를 참조하는 현재 시간대의 마지막 막대 날짜가 필요합니다.

이제 명확합니까?

귀하의 요청을 올바르게 이해했다면:

1. 상단 TF의 원하는 바의 닫힘 시간을 결정합니다.

2. 시니어 기간의 막대와 함께 끝나는 주니어 기간의 막대 시간을 계산합니다.

3. 이때 더 낮은 TF의 막대를 요청합니다(요구는 엄격하지 않음) - 타임라인에서 가장 왼쪽에 있는 막대를 가져옵니다.

4. 필요한 경우 이 막대가 상위 TF의 막대 내부에 있는지 확인합니다(어떤 이유로 상위 TF의 막대 내부에 하위 TF의 막대가 전혀 없는 경우 옵션 제외).

 
Vladimir Karputov :

아니오, 명확하지 않습니다. 두뇌는 계속 끓고 폭발합니다 :). 하나의 막대는 자체 시간대에만 속합니다.

자, 이제 생각의 시각화로 넘어갑시다 :)

흰색으로 그는 우리가 요청하는 곳을, 노란색으로 우리가 받아야 할 바의 시간을 보여주었습니다.

그게 더 명확해? 그렇지 않은 경우 명확한 질문을 하십시오.

 
Aleksey Vyazmikin :

자, 이제 생각의 시각화로 넘어갑시다 :)

흰색으로 그는 우리가 요청하는 곳을, 노란색으로 우리가 받아야 할 바의 시간을 보여주었습니다.

그게 더 명확해? 그렇지 않은 경우 명확한 질문을 하십시오.

1. 사진이 너무 작아요 - 다음에는 바로 2미터를 2미터로 맞춰주세요 :)

2. 나는 다시 생각을 이해하지 못했습니다 - 당신은 일정 기간에 차트를 보여주었습니다. 이 기간에 바 번호 N을 요청하는 데 문제가 있습니까?

 
Vladimir Karputov :

1. 사진이 너무 작아요 - 다음에는 바로 2미터를 2미터로 맞춰주세요 :)

2. 나는 다시 생각을 이해하지 못했습니다 - 당신은 일정 기간에 차트를 보여주었습니다. 이 기간에 바 번호 N을 요청하는 데 문제가 있습니까?

1. 더 할 수 있어요 - 문제없어요 ;)

2. 시간 프레임은 왼쪽 상단 모서리 - M5에 표시됩니다. 특히 시프트가 상위 TF의 1마디가 아니라 더 많은 바인 경우 정확히 구하는 방법을 모르기 때문에 소절 번호 N을 요청할 수 없습니다.

한 바씩 이동하기 위해 다음 알고리즘을 시도합니다.

1. 현재 상위 시간 프레임의 시작부터 몇 개의 막대가 지나갔는지 확인합니다.

2. 결과 숫자를 1 bar만큼 이동하고 iTime 기능을 사용하여 시간을 찾으십시오.

사유: