초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 180

 
Igor Makanu :

예, 저도 같은 의견이지만 표시기 버퍼 의 기록과 수뿐만 아니라 나는 다시 메모리 할당을 하고 있습니다. MT4 메모리가 모두 소모되면 둔해지기 시작합니다. 분명히 메모리 영역을 확보하기 시작합니다.

개발자는 확실히 대답할 수 있지만 우리는 MetaTrader 4에 대해 이야기하고 있으며 여기에서는 ...

 
Alexander Fedosov :

코드에서 일부 계산을 수행하는 이유는 무엇입니까?

계산하지 마세요 - 주제가 뜬금없었지만 옵티마이저가 하는 일을 확인하는 것이 흥미로워서 코드를 스케치했습니다.

다음과 같이 코드에 추가하십시오.

 int handle= INVALID_HANDLE ;
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   handle= FileOpen ( "tst.txt" , FILE_READ | FILE_WRITE | FILE_TXT );
   FileSeek (handle, 0 , SEEK_END );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---
   if (handle!= INVALID_HANDLE )
     {
       FileWriteString (handle, DoubleToString (Value1), DoubleToString (Value2)+ "\n" );
       FileClose (handle);
     }
  }
//+------------------------------------------------------------------+
void OnTick ()
  {
  }

저것들. 파일에 최적화 매개변수를 쓰기만 하면 됩니다. 파일이 정지하면 파일의 마지막 패스, 매개변수가 무엇인지, 파일 시간은 테스터의 "마지막 호흡" 시간을 읽을 수 있습니다.

 
Artyom Trishkin :

개발자는 확실히 대답할 수 있지만 우리는 MetaTrader 4에 대해 이야기하고 있으며 여기에서는 ...

그리고 나서 .. 아무것도 바뀌지 않을 것입니다. 우리는 우리가 가진 것을 사용합니다.

 

안녕하세요! 말해봐, 거래 시스템은 특정 조건에서 새로운 시간당 막대가 열릴 때만 포지션을 엽니다. 현재 막대에서 손절매로 포지션을 청산할 때 거래가 다시 열리지 않도록 해야 합니다. 나는 이것을 다음과 같이 구현했다.

if (OrdersTotal()==0 && ticket!=-1) // 공석은 없지만 티켓은 존재함

{

if (OrderSelect(티켓,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // 주문 마감 시간

날짜 시간 tob=iTime(NULL,PERIOD_H1,0); // 현재 막대의 여는 시간

if (tob>tct) // 거래가 열렸을 때 동일한 양초에서 거래가 마감된 경우 재주문을 열 수 없습니다.

{

오픈 포지션 기능

}


전략 테스터에서는 더 이상 반복 포지션이 열리지 않았고, 라이브 거래 시 포지션이 열렸습니다. 무슨 일이야?))

 
kmerlin :

안녕하세요! 말해봐, 거래 시스템은 특정 조건에서 새로운 시간당 막대가 열릴 때만 포지션을 엽니다. 현재 막대에서 손절매로 포지션을 청산할 때 거래가 다시 열리지 않도록 해야 합니다. 나는 이것을 다음과 같이 구현했다.

if (OrdersTotal()==0 && ticket!=-1) // 공석은 없지만 티켓은 존재함

{

if (OrderSelect(티켓,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // 주문 마감 시간

날짜 시간 tob=iTime(NULL,PERIOD_H1,0); // 현재 막대의 여는 시간

if (tob>tct) // 거래가 열렸을 때 동일한 양초에서 거래가 마감된 경우 재주문을 열 수 없습니다.

{

오픈 포지션 기능

}


전략 테스터에서는 더 이상 반복 포지션이 열리지 않았고, 라이브 거래 시 포지션이 열렸습니다. 무슨 일이야?))

그것?

 
Alexander Fedosov :

그것?


설마. 내 버전에 무슨 문제가 있습니까? 주요 조건은 현재 시간당 캔들에 대한 재진입 가능성이 아닙니다! 결국, 상당히 간단한 조건, 무엇이 문제이며 왜 작동하지 않습니까?

 
kmerlin :

설마. 내 버전에 무슨 문제가 있습니까? 주요 조건은 현재 캔들에 대한 재진입 가능성이 아닙니다! 결국, 상당히 간단한 조건, 무엇이 문제이며 왜 작동하지 않습니까?

 if ( OrdersTotal ()== 0 && ticket!=- 1 ) // Открытых лотов нет но тикет существует

{

if ( OrderSelect (ticket,SELECT_BY_TICKET)== true )

{

datetime tct=OrderCloseTime(); // Время закрытия ордера

datetime tob= iTime ( NULL , PERIOD_H1 , 0 ); // Время открытия бара текущего

if (tob>tct) // Не дает открыть повторный ордер если сделка закрылась на той же свече что и открылась

{

ФУНКЦИЯ ОТКРЫТИЯ ПОЗИЦИИ

}

OrderSelect 에서 어떤 티켓이 선택되었습니까?

 
Alexander Fedosov :

OrderSelect에서 어떤 티켓이 선택되었습니까?

티켓은 마지막에 전송됩니다... 주문이 열리면 시스템에 따라 새 주문을 열 수 없으며 대기 주문 도 있을 수 없습니다. 따라서 마지막 티켓은 마지막 정류장 또는 이익 주문입니다.
 
kmerlin :
티켓은 마지막에 전송됩니다... 주문이 열리면 시스템에 따라 새로운 주문을 열 수 없으며 대기 주문 도 있을 수 없습니다. 따라서 마지막 티켓은 마지막 정류장 또는 이익 주문입니다.

라스트 오더 티켓은 어떻게 전달하나요?

그리고 OrdersTotal()은 열린 주문과 보류 중인 주문의 총 수를 전달합니다.

다음은 현재 기간의 새 막대입니다.

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsNewBar()
  {
   static datetime prevtime= 0 ;
   if (prevtime==Time[ 0 ])
       return ( false );
   else
     {
      prevtime=Time[ 0 ];
       return ( true );
     }
  }
 
Alexander Fedosov :

라스트 오더 티켓은 어떻게 전달하나요?

그리고 OrdersTotal()은 열린 주문과 보류 중인 주문의 총 수를 전달합니다.

다음은 현재 기간의 새 막대입니다.

티켓은 전역 변수 로 선언됩니다. 구매 또는 판매 시 티켓이 양도됩니다. 내 시스템에서는 여러 주문을 열 수 없으며 하나의 주문과 보류 중인 주문도 열 수 없습니다. 포지션이 열려있든 없든. 따라서 마지막 티켓은 내가 이해하는 한 이익 또는 정지로 마감된 주문입니다.

ok, 머리가 윙윙 거리고 .. 내일 다시 생각하고 조언