주문이 열려 있을 때 파일에 쓸 수 없습니다. - 페이지 2

 

WHRoeder :

Handle= FileOpen (File_Name, FILE_CSV | FILE_WRITE , ";" ); //File opening
Handle= FileOpen (File_Name, FILE_CSV | FILE_READ | FILE_WRITE , ";" ); //File opening

잘못된 마지막 인수 - int가 아님

무슨 말인지 자세히 설명해 주시겠습니까?

문서( FileOpen() 참조)에는 구분 기호가 작은따옴표로 묶인 것으로 표시되어 있지만 책( 파일 작업 참조)은 작은따옴표 사용과 관련하여 일관성이 없습니다. 일부 코드 예제에서는 큰따옴표 사용을 보여줍니다.

또한 다음 코드:

 int handle= FileOpen ( "testing.csv" , FILE_CSV | FILE_WRITE | FILE_READ , ";" );
if (handle > 0 ) {
   FileSeek (handle, 0 , SEEK_END );
   FileWrite (handle, "test1" , "test2" , "test3" , "test4" );
   FileClose (handle);
}
else
   Print ( "FileOpen failed. Error # " , GetLastError ());

컴파일되고 런타임 오류가 없었으며 파일에 다음 출력이 생성되었습니다.

파일 테스트 #1

 
RaptorUK : ";" 아니 ';' . . . 받은 오류 메시지는 매개변수 1에 대해 이야기했는데 파일 핸들이 아닌가요?
첫 번째는 문자열이고 두 번째는 int(필요한 경우)입니다. p 1에서 언급한 오류입니다. 여러 문제가 있습니까?
 
RaptorUK :
"부품" 죄송합니다. . . **** END TICK USDCHF **** 메시지를 받았습니까? 아니면 그 전에 끝나나요?


예, 파일이 완성되었습니다.
 
RaptorUK :

당신은 ";" 아니 ';' . . . 받은 오류 메시지는 매개변수 1에 대해 이야기했는데 파일 핸들이 아닌가요?

예, 다른 사람이 잘못된 마지막 매개변수 에 대해 이야기하고 있었습니다. 이유를 모르겠습니다. 그래도 나는 ";" 을 위한 ';' 그러나 같은 문제가 발생했습니다.
 
Thirteen :

무슨 말인지 자세히 설명해 주시겠습니까?

문서( FileOpen() 참조)에는 구분 기호가 작은따옴표로 묶인 것으로 표시되어 있지만 책( 파일 작업 참조)은 작은따옴표 사용과 관련하여 일관성이 없습니다. 일부 코드 예제에서는 큰따옴표 사용을 보여줍니다.

또한 다음 코드:

컴파일되고 런타임 오류가 없었으며 파일에 다음 출력이 생성되었습니다.



나는 시도했다 ";" 그리고 ';' 같은 문제가 발생했습니다.

내 코드가 실행되고 잘 작동하고 파일이 생성되고 모든 틱이 파일이 열리고 모든 정보가 기록된 다음 파일이 닫힙니다. EA가 주문을 열 때까지 모든 것이 잘 작동하고 파일에 아무 것도 기록되지 않습니다.

 
WHRoeder :
첫 번째는 문자열이고 두 번째는 int(필요한 경우)입니다. p 1에서 언급한 오류입니다. 여러 문제가 있습니까?


오류는 파일 핸들이고 핸들은 항상 1이고 항상 작동하지만 EA가 주문을 열 때 핸들이 다시 1이고 지난 수백 틱 동안 작동했음에도 불구하고 핸들이 유효하지 않다고 말하는 다음 틱입니다. 마지막으로 시도했을 때 주문이 열렸을 때 핸들이 올라가기 시작하여 2, 3, 4 등이 되었습니다.

정확히 같은 코드입니다. 왜 1로 유지되지 않는지 모르겠고, 여전히 1인 경우에도 여전히 오류가 발생합니다.

 
어떤 생각이 있습니까?
 
favosys :
어떤 생각이 있습니까?

게시한 코드에 문제가 있다고 볼 수 없습니다.

그래서 2가지 옵션이 보입니다.

  • 모든 코드를 게시하여 우리가 직접 시도하고 수정할 수 있도록 합니다.
  • 문제를 복제하는 짧은 스크립트/EA를 만들고 게시

 
RaptorUK :

게시한 코드에 문제가 있다고 볼 수 없습니다.

그래서 2가지 옵션이 보입니다.

  • 모든 코드를 게시하여 우리가 직접 시도하고 수정할 수 있도록 합니다.
  • 문제를 복제하는 짧은 스크립트/EA를 만들고 게시


RaptorUK에 감사드립니다. 문제를 수정하기 위해 문제를 정확히 복제하는 EA를 이미 만들었습니다. 기본적으로 시작하고 틱을 계산하는 파일에 쓰는 틱마다 파일을 만듭니다. 따라서 파일은 틱 1, 틱 2 등과 같습니다.

틱 15에서 주문이 열리고 주문 정보가 파일에 나타나고 끝(******)도 나타납니다. 그 후 각 틱에 틱 번호(16, 17 등)와 주문 상태, 즉 주문이 아직 열려 있는지 여부를 기록해야 합니다. 어떤 이유로 틱 15 이후 EA는 파일에 쓰지 않습니다.

틱 50에서는 주문을 마감해야 하지만 그것은 중요하지 않습니다. 중요한 것은 주문을 열 때 파일에 계속 기록한다는 것입니다.

내 Windows 7 컴퓨터에서 파일은 C:\Users\{username}\AppData\Local\VirtualStore\Program Files (x86)\SIGTrader 4\experts\files에 생성됩니다.

Appdata는 숨겨진 폴더입니다.

미리 감사드립니다

암호:

 //+------------------------------------------------------------------+
//|                                                          log.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"

extern string      Nombre_archivo= "log" ;
extern int         Take_Profit= 6 ;
extern int         Stop_Loss= 35 ;
extern int         Deslizamiento= 4 ;
extern double      vol= 1 ;
int                Handle, Qnt_Symb, ticket, err, abierta = 0 ;
string             File_Name, larcor;


int cont= 1 ;

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   File_Name = StringConcatenate (Nombre_archivo, " - " , Symbol (), " - " , TimeToStr( TimeLocal (),TIME_DATE), " - " , TimeHour( TimeLocal ()), "." , TimeMinute( TimeLocal ()), "." , TimeSeconds( TimeLocal ()), ".txt" );
   Handle= FileOpen (File_Name, FILE_CSV | FILE_WRITE , ';' ); //File opening
   if (Handle==- 1 )                       // File opening fails
     {
       Alert ( "An error while opening the file. " , // Error message
               "May be the file is busy by the other applictiom" );
       PlaySound ( "Bzrrr.wav" );           // Sound accompaniment
       return ;                           // Exir start()      
     }
     FileClose ( Handle );
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
   double op, cl;
   
   Print ( "Order open: " , abierta);
   //Print("File: ", File_Name);

    Handle= FileOpen (File_Name, FILE_CSV | FILE_READ | FILE_WRITE , ';' ); //File opening
     Print ( "Handle: " , Handle);
   if (Handle==- 1 )                       // File opening fails
     {
       Alert ( "An error while opening the file. " , // Error message
               "May be the file is busy by the other applictiom" );
       PlaySound ( "Bzrrr.wav" );           // Sound accompaniment
       return ;                           // Exir start()      
     }
   FileSeek (Handle, 0 , SEEK_END );
   
   Qnt_Symb= FileWrite (Handle, "**** INICIANDO TICK PAR " , Symbol (), ": " , TimeToStr( TimeLocal (),TIME_DATE|TIME_SECONDS), " ****" );
   Qnt_Symb= FileWrite (Handle, "************************************************************" );   
   
   Qnt_Symb= FileWrite (Handle,TimeToStr( TimeLocal (),TIME_DATE|TIME_SECONDS), " - " , "Este es el tick num: " , cont);
   if (cont == 15 ){
      op = iOpen( NULL , 0 , 0 );
      cl = iClose( NULL , 0 , 0 );
      
       if (op < cl){
         Qnt_Symb= FileWrite (Handle,TimeToStr( TimeLocal (),TIME_DATE|TIME_SECONDS), " - " , "Estamos en LARGO, se abre compra" );
         ticket = OrderSend ( Symbol (),OP_BUY,vol,Ask,Deslizamiento,Ask-Stop_Loss* Point ,Ask+Take_Profit* Point );
         if (ticket == - 1 ){
            err = GetLastError ();
            Qnt_Symb= FileWrite (Handle,TimeToStr( TimeLocal (),TIME_DATE|TIME_SECONDS), " - " , " Error No. " , err, " al tratar de abrir la orden" );
         }
         else {
            Qnt_Symb= FileWrite (Handle,TimeToStr( TimeLocal (),TIME_DATE|TIME_SECONDS), " - " , " Abierta orden " , ticket, ", hora: " , TimeToStr( TimeCurrent (),TIME_DATE|TIME_SECONDS));
            abierta = 1 ;
         }
       }
       else {
         Qnt_Symb= FileWrite (Handle,TimeToStr( TimeLocal (),TIME_DATE|TIME_SECONDS), " - " , "Estamos en CORTO, se abre venta" );
         ticket = OrderSend ( Symbol (),OP_SELL,vol,Bid,Deslizamiento,Bid+Stop_Loss* Point ,Bid-Take_Profit* Point );
         if (ticket == - 1 ){
            err = GetLastError ();
            Qnt_Symb= FileWrite (Handle,TimeToStr( TimeLocal (),TIME_DATE|TIME_SECONDS), " - " , " Error No. " , err, " al tratar de abrir la orden" );
         }
         else {
            Qnt_Symb= FileWrite (Handle,TimeToStr( TimeLocal (),TIME_DATE|TIME_SECONDS), " - " , " Abierta orden " , ticket, ", hora: " , TimeToStr( TimeCurrent (),TIME_DATE|TIME_SECONDS));
            abierta = 1 ;
         }
       }
   }
   
   if ((cont > 15 ) && (cont < 50 )){
       if (ticket != - 1 ){
         if ( OrderSelect (ticket, SELECT_BY_TICKET) == true ){
             datetime horacierre = OrderCloseTime();
             if (horacierre == 0 ){
               Qnt_Symb= FileWrite (Handle,TimeToStr( TimeLocal (),TIME_DATE|TIME_SECONDS), " - " , "Orden " , ticket, " en par " . Symbol (), " sigue abierta." );   
            }
             else {
               Qnt_Symb= FileWrite (Handle,TimeToStr( TimeLocal (),TIME_DATE|TIME_SECONDS), " - " , "La orden " , ticket, " se cerro automaticamente a las " , TimeToStr(horacierre,TIME_DATE|TIME_SECONDS));
            }
          }
      }
   }
   
   if (cont == 50 ){
       if (abierta == 1 ){
         if (larcor == "LARGO" ){
             if (OrderClose(ticket,OrderLots(),Ask, 3 )){
               Qnt_Symb= FileWrite (Handle,TimeToStr( TimeLocal (),TIME_DATE|TIME_SECONDS), " - " , "Se cerro la orden " , ticket, " en LARGO" );
            }
             else {
               Qnt_Symb= FileWrite (Handle,TimeToStr( TimeLocal (),TIME_DATE|TIME_SECONDS), " - " , "No se pudo cerrar la orden " , ticket, " en LARGO" );
            }
         }
         else {
             if (OrderClose(ticket,OrderLots(),Bid, 3 )){
               Qnt_Symb= FileWrite (Handle,TimeToStr( TimeLocal (),TIME_DATE|TIME_SECONDS), " - " , "Se cerro la orden en CORTO" );
            }
             else {
               Qnt_Symb= FileWrite (Handle,TimeToStr( TimeLocal (),TIME_DATE|TIME_SECONDS), " - " , "No se pudo cerrar la orden " , ticket, " en CORTO" );
            }
         }
      }
   }
   
   if (cont > 50 ){
      Qnt_Symb= FileWrite (Handle,TimeToStr( TimeLocal (),TIME_DATE|TIME_SECONDS), " - " , "Fin de EA" );
   }
   
   Qnt_Symb= FileWrite (Handle, "***************************" );      
   Qnt_Symb= FileWrite (Handle, "**** FIN TICK PAR " , Symbol (), " ****" );        
   FileClose ( Handle );
   cont++;   
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
 
favosys :


RaptorUK에 감사드립니다. 문제를 수정하기 위해 문제를 정확히 복제하는 EA를 이미 만들었습니다. 기본적으로 시작하고 틱을 계산하는 파일에 쓰는 틱마다 파일을 만듭니다. 따라서 파일은 틱 1, 틱 2 등과 같습니다.

틱 15에서 주문이 열리고 주문 정보가 파일에 나타나고 끝(******)도 나타납니다. 그 후 각 틱에 틱 번호(16, 17 등)와 주문 상태, 즉 주문이 아직 열려 있는지 여부를 기록해야 합니다. 어떤 이유로 틱 15 이후 EA는 파일에 쓰지 않습니다.

틱 50에서는 주문을 마감해야 하지만 그것은 중요하지 않습니다. 중요한 것은 주문을 열 때 파일에 계속 기록한다는 것입니다.

내 Windows 7 컴퓨터에서 파일은 C:\Users\{username}\AppData\Local\VirtualStore\Program Files (x86)\SIGTrader 4\experts\files에 생성됩니다.

Appdata는 숨겨진 폴더입니다.

미리 감사드립니다

암호:

코드는 내가 테스트에 사용하는 브로커와 거래를 하지 않으며 ECN "유형" 브로커입니다. TP와 SL을 조정하고 0.0으로 설정하겠습니다.