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

 
AlGuru : 말해주세요. 어드바이저에서 다음 캔들에 마감을 표시하는 방법은 무엇입니까?
datetime Time[] - 현재 차트 의 각 막대가 열리는 시간을 포함하는 시계열 배열입니다. 시간[0] - 마지막 막대 의 여는 시간입니다 . 주문 개시의 OrderOpenTime() 시간이 다음보다 짧은 경우 시간[0] - 이전 막대에서 주문이 열려 있음을 의미하며, 귀하의 전략에 따라 해당 주문을 마감할 시간입니다.
 
STARIJ :
datetime Time[] - 현재 차트 의 각 막대가 열리는 시간을 포함하는 시계열 배열입니다. 시간[0] - 마지막 막대 의 여는 시간입니다 . OrderOpenTime() 주문 오픈 시간인 경우 더 작은 시간[0] - 주문이 이전 막대에서 열려 있음을 의미하며 전략에 따라 해당 주문을 마감할 시간입니다.
아니면 잊어 버리고 1 년 전에 열렸습니까?)
 
STARIJ :
datetime Time[] - 현재 차트 의 각 막대가 열리는 시간을 포함하는 시계열 배열입니다. 시간[0] - 마지막 막대 의 여는 시간입니다 . 주문 개시의 OrderOpenTime() 시간이 다음보다 짧은 경우 시간[0] - 이전 막대에서 주문이 열려 있음을 의미하며 전략에 따라 해당 주문을 마감할 시간입니다.


고맙습니다! iTime 기능 으로 만 문제를 해결했습니다. 나는 아직 배열과 친구가 아닙니다)).

 
AlGuru :


고맙습니다! 방금 iTime 기능으로 문제를 해결했습니다. 나는 아직 배열과 친구가 아닙니다)).

당신이 어떻게 결정하는지 보여주세요.

고려하지 않았을 수 있는 몇 가지 사항이 있습니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

MQL4에 대한 모든 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론

Artyom Trishkin , 2017.05.25 19:43

스타지 :
datetime Time[] - 현재 차트 의 각 막대가 열리는 시간을 포함하는 시계열 배열입니다. 시간[0] - 마지막 막대 의 여는 시간입니다 . OrderOpenTime() 주문 오픈 시간인 경우 더 작은 시간[0] - 주문이 이전 막대에서 열려 있음을 의미하며 전략에 따라 해당 주문을 마감할 시간입니다.

아니면 잊어 버리고 1 년 전에 열렸습니까?)

 
Artyom Trishkin :

당신이 어떻게 결정하는지 보여주세요.

고려하지 않았을 수 있는 몇 가지 사항이 있습니다.



OrderOpenTime() < iTime( 기호() , 0, 0)
 
AlGuru :

주문오픈타임() < iTime(기호(), 0, 0)

주문 오픈 시간 이 일주일 전이라면? 그렇다면 그것은 확실히 마지막 캔들에 있지 않습니다(차트가 주간 차트가 아닌 경우). 그것도 닫아?

물론 그것은 모두 당신의 차량의 요구 사항에 달려 있지만 나는 다른 방향으로 갈 것입니다 ...

 
Artyom Trishkin :

주문 오픈 시간 이 일주일 전이라면? 그렇다면 그것은 확실히 마지막 캔들에 있지 않습니다(차트가 주간 차트가 아닌 경우). 그것도 닫아?

물론 그것은 모두 당신의 차량의 요구 사항에 달려 있지만 나는 다른 방향으로 갈 것입니다 ...


이것은 추가 조건입니다. 가격이 MA 라인을 넘으면 포지션이 닫힙니다. 가격이 라인에서 바로 열리고 매 틱마다 포지션이 열리고 닫힙니다. 다음 캔들보다 빠르지 않은 시점에 포지션을 청산하여 문제를 해결했습니다.
 

모두에게 좋은 하루!

전략 테스터 에서 다음 작업을 코딩하는 방법을 알려주세요.

일반적인 의미

1.N-X 주문 이 열렸습니다(볼륨 = 0.1)

2.만약 그리고 이것 주문은 SL에 의해 마감됩니다. 손실을 보상하기 위해 NX 주문 의 SL 종가에 즉시 N - X1 주문 이 열립니다(볼륨 = 0.3).

난 필요해

3 주문 (볼륨 = 0.3)이 SL에 의해 마감된 경우 - 주문이 열린 손실 보상 하기위해 N -X 주문 의 개장 시간 값만 기억하십시오.

나는 두 주문을 모두 여는 방법을 알고 있지만 SL이 마감한 0.1랏의 주문 시간 값을 기억하는 방법을 알 수 없습니다.

한 틱의 주문 마감과 관련된 참고 사항입니다.

볼륨이 0.1이고 볼륨이 0.3인 두 개 이상의 주문이 동일한 틱에 마감되는 경우가 있습니다.

예를 들어 0.1에서 3개의 주문 이 SL에 의해 닫힌 경우 0.3에서 3개의 주문 을 여는 대신. - 0.3 중 1개만 오픈

이 경우 0.3로트 중 1개 주문만 SL에서 청산했을 때, 0.1로트 2개 주문의 오픈시간 값을 받지 못하여 오픈 손실 보상합니다.

즉, 이 경우 하나가 아니라 정확히 0.3 로트의 3개 주문 이 열려야 합니다.


그리고 해당 주문이 각각 0.1이라는 사실에도 불구하고 한 틱에서 SL에 의해 마감됩니다(예: 0.3 로트의 3개 주문). 로트가 다른 틱에서 열렸습니다(그러나 동일한 가격으로)

이 경우 프로그램은 0.1랏의 볼륨으로 마지막 주문에 필요한 시간 값을 다시 저장합니다.

그리고 0.1랏의 거래량으로 SL이 마감한 각 주문 의 시간 값을 기억하는 프로그램이 필요합니다.


다음은 완성할 내 코드입니다.

도와 주셔서 감사합니다.

 int   A2;
int A1;
int A;
int start()                                             
{                                               
int ot = OrdersTotal ();                                         
int Ht = OrdersHistoryTotal ();
                                                
                                                
if ( Bid == iOpen ( NULL , PERIOD_H1 , 0 ))
if ( A!= Hour () )
{
OrderSend ( Symbol (), OP_SELL , 0.1 , Bid , 3 , Ask + 400 * Point , Ask - 200 * Point , "jfh" , 123 );
A = Hour ();
}                                               
//**************************************************************************************
int Счет= 0 , Номер= OrdersHistoryTotal ()- 1 ;
//int A1=0;
   for ( ; Номер>= 0 ; Номер--)
  {
     if (! OrderSelect (Номер, SELECT_BY_POS , MODE_HISTORY )) continue ;
    A1= OrderOpenTime ();
     if ( OrderProfit ()>= 0 ) break ;
    Счет++;
     if (Счет == 1 &&A2!= OrderOpenTime ())
    {
    A2= OrderOpenTime ();
     OrderSend ( Symbol (), OP_SELL , 0.3 , Bid , 3 , Ask + 400 * Point , Ask - 200 * Point , "jfh" , 123 );
    }
  }
//************************************************************************************** 
return ;
}

다음은 한 틱에 여러 주문이 마감되는 상황의 예입니다.

         08 : 51 : 38.906      2017.03 . 27 13 : 09 : 44   Tester: stop loss # 200 at 1.08858 ( 1.08856 / 1.08858 )
2        08 : 51 : 38.906      2017.03 . 27 13 : 09 : 44    1 = 1 = 1 = 1 EURUSD,M1: open # 214 sell 0.30 EURUSD at 1.08856 sl: 1.09258 tp: 1.08658 ok
0        08 : 51 : 38.906      2017.03 . 27 13 : 10 : 28    Tester: stop loss # 192 at 1.08879 ( 1.08877 / 1.08879 )
0        08 : 51 : 38.906      2017.03 . 27 13 : 10 : 28   Tester: stop loss # 193 at 1.08879 ( 1.08877 / 1.08879 )
2        08 : 51 : 38.906      2017.03 . 27 13 : 10 : 28    1 = 1 = 1 = 1 EURUSD,M1: open # 215 sell 0.30 EURUSD at 1.08877 sl: 1.09279 tp: 1.08679 ok
0        08 : 51 : 38.906      2017.03 . 27 13 : 10 : 29   Tester: stop loss # 194 at 1.08880 ( 1.08878 / 1.08880 )
 
AlGuru :

이것은 추가 조건입니다. 가격이 MA 라인을 넘으면 포지션이 닫힙니다. 가격이 라인에서 바로 열리고 매 틱마다 포지션이 열리고 닫힙니다. 다음 캔들보다 빠르지 않은 시점에 포지션을 청산하여 문제를 해결했습니다.

이 문제는 바로 이 바에 포지션이 이미 개설 및 마감 되었는지 여부를 확인하여 해결해야 합니다.

그렇지 않으면 모든 것을 힙에 던지게 됩니다. 신호 기능은 신호를 보내야 하며 거래 기능은 이미 신호의 유효성을 확인해야 합니다.

 

안녕하세요. 유로와 USD 통화 쌍을 1.0616이 아닌 149.16325로 표시할 수 있는 이유는 무엇 입니까?


사유: