포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 860

 

어디가 잘못되었는지 모르겠습니다.

Op.

파일:
5system2.mq4  8 kb
 
CJIeCaPb :

실수가 어디 있는지, 나는 모른다.

Op.

while(O==3) 루프에 문제가 있습니다.

 
CJIeCaPb :

while(O==3) 루프에 문제가 있습니다.

휴 ... 모두 알아 냈습니다. 종료 후 티켓이 삭제되고 주문을 다시 정렬해야 합니다.
 
안녕하세요! 문제는 파일을 열 수 없습니다. 다른 파일 확장자를 시도했지만 쓸모가 없습니다. 오류 5004가 표시됩니다. 파일은 파일 샌드박스에 있습니다. 핸들에 관한 모든 것이지만 왜 그런지 모르겠습니다. 코드는 다음과 같습니다.
   int filehandle= FileOpen ( "test.txt" , FILE_TXT | FILE_WRITE , ";" );
   if (filehandle< 0 )
   Alert("ошибка ",GetLastError());                          //Для проверки handle

 
 int filehandle=FileOpen("test.txt",FILE_WRITE|FILE_TXT,";");
 
evillive :
구분 기호 없이 시도 - 쓸모가 없습니다.
 
Kapizdo4ka :
안녕하세요! 문제는 파일을 열 수 없습니다. 다른 파일 확장자를 시도했지만 쓸모가 없습니다. 오류 5004가 표시됩니다. 파일은 파일 샌드박스에 있습니다. 핸들에 관한 모든 것이지만 왜 그런지 모르겠습니다. 코드는 다음과 같습니다.

파일이 공유 폴더에 있음을 지정하지 않았습니다.

파일 열기 플래그

파일 작업 모드를 결정하는 플래그 값. 플래그는 다음과 같이 정의됩니다.

식별자

의미

설명

파일_읽기

하나

파일이 읽기 위해 열립니다. 플래그는 파일을 열 때 사용됩니다( FileOpen() ). 파일을 열 때 FILE_WRITE 플래그 및/또는 FILE_READ 플래그를 지정해야 합니다.

파일_쓰기

2

파일이 쓰기 위해 열립니다. 플래그는 파일을 열 때 사용됩니다( FileOpen() ). 파일을 열 때 FILE_WRITE 플래그 및/또는 FILE_READ 플래그를 지정해야 합니다.

FILE_BIN

4

이진 읽기-쓰기 모드(문자열에서 문자열로의 변환 없음). 파일을 열 때 사용되는 플래그( FileOpen() )

파일_CSV

여덟

csv 파일(기록된 모든 요소는 적절한 유형, 유니코드 또는 ansi의 문자열로 변환되고 구분 기호로 구분됨). 파일을 열 때 사용되는 플래그( FileOpen() )

FILE_TXT

열여섯

간단한 텍스트 파일(같은 csv이지만 구분 기호는 고려되지 않음). 파일을 열 때 사용되는 플래그( FileOpen() )

FILE_ANSI

32

ANSI 유형 문자열(1바이트 문자). 파일을 열 때 사용되는 플래그( FileOpen() )

FILE_UNICODE

64

UNICODE 유형의 문자열(2바이트 문자). 파일을 열 때 사용되는 플래그( FileOpen() )

FILE_SHARE_READ

128

여러 프로그램에서 읽기 위한 공유 액세스. 플래그는 파일을 열 때 사용되지만( FileOpen() ), 파일을 열 때 FILE_WRITE 및/또는 FILE_READ 플래그를 지정할 필요를 대체하지 않습니다.

FILE_SHARE_WRITE

256

여러 프로그램에서 쓰기 액세스를 공유합니다. 플래그는 파일을 열 때 사용되지만( FileOpen() ), 파일을 열 때 FILE_WRITE 및/또는 FILE_READ 플래그를 지정할 필요를 대체하지 않습니다.

FILE_REWRITE

512

FileCopy()FileMove() 함수로 파일을 덮어쓰는 기능. 파일이 존재하거나 쓰기 위해 열려 있어야 합니다. 그렇지 않으면 파일이 열리지 않습니다.

FILE_COMMON

4096

모든 클라이언트 터미널의 공통 폴더에 있는 파일 위치 \Terminal\Common\Files . 플래그는 파일 열기( FileOpen() ), 파일 복사( FileCopy() , FileMove() ) 및 파일 존재 확인( FileIsExist() )에 사용됩니다.

파일을 열 때 하나 이상의 플래그를 지정할 수 있으며 이 조합을 플래그 조합이라고 합니다. 플래그 조합은 열거된 플래그 사이에 있는 논리적 OR 연산자(|)를 사용하여 작성됩니다. 예를 들어 CSV 파일을 동시에 읽고 쓰기 위해 열려면 FILE_READ|FILE_WRITE|FILE_CSV 조합을 지정할 수 있습니다.

 
Vinin :

파일이 공유 폴더에 있음을 지정하지 않았습니다.

파일 열기 플래그

파일 작업 모드를 결정하는 플래그 값. 플래그는 다음과 같이 정의됩니다.

식별자

의미

설명

파일_읽기

하나

파일이 읽기 위해 열립니다. 플래그는 파일을 열 때 사용됩니다( FileOpen() ). 파일을 열 때 FILE_WRITE 플래그 및/또는 FILE_READ 플래그를 지정해야 합니다.

파일_쓰기

2

파일이 쓰기 위해 열립니다. 플래그는 파일을 열 때 사용됩니다( FileOpen() ). 파일을 열 때 FILE_WRITE 플래그 및/또는 FILE_READ 플래그를 지정해야 합니다.

FILE_BIN

4

이진 읽기-쓰기 모드(문자열에서 문자열로의 변환 없음). 파일을 열 때 사용되는 플래그( FileOpen() )

파일_CSV

여덟

csv 파일(기록된 모든 요소는 적절한 유형, 유니코드 또는 ansi의 문자열로 변환되고 구분 기호로 구분됨). 파일을 열 때 사용되는 플래그( FileOpen() )

FILE_TXT

열여섯

간단한 텍스트 파일(csv와 동일하지만 구분 기호는 고려되지 않음). 플래그는 파일을 열 때 사용됩니다( FileOpen() )

FILE_ANSI

32

ANSI 유형 문자열(1바이트 문자). 파일을 열 때 사용되는 플래그( FileOpen() )

FILE_UNICODE

64

UNICODE 유형의 문자열(2바이트 문자). 파일을 열 때 사용되는 플래그( FileOpen() )

FILE_SHARE_READ

128

여러 프로그램에서 읽기 위한 공유 액세스. 플래그는 파일을 열 때 사용되지만( FileOpen() ), 파일을 열 때 FILE_WRITE 및/또는 FILE_READ 플래그를 지정할 필요를 대체하지 않습니다.

FILE_SHARE_WRITE

256

여러 프로그램에서 공유 쓰기 액세스. 플래그는 파일을 열 때 사용되지만( FileOpen() ), 파일을 열 때 FILE_WRITE 및/또는 FILE_READ 플래그를 지정할 필요를 대체하지 않습니다.

FILE_REWRITE

512

FileCopy()FileMove() 함수로 파일을 덮어쓰는 기능. 파일이 존재하거나 쓰기 위해 열려 있어야 합니다. 그렇지 않으면 파일이 열리지 않습니다.

FILE_COMMON

4096

모든 클라이언트 터미널의 공통 폴더에 있는 파일 위치 \Terminal\Common\Files . 플래그는 파일 열기( FileOpen() ), 파일 복사( FileCopy() , FileMove() ) 및 파일 존재 확인( FileIsExist() )에 사용됩니다.

파일을 열 때 하나 이상의 플래그를 지정할 수 있으며 이 조합을 플래그 조합이라고 합니다. 플래그 조합은 열거된 플래그 사이에 있는 논리적 OR 연산자(|)를 사용하여 작성됩니다. 예를 들어 읽기 및 쓰기를 위해 동시에 CSV 형식의 파일을 열려면 FILE_READ|FILE_WRITE|FILE_CSV 조합을 지정할 수 있습니다.

고맙습니다! 그러나 대답은 훨씬 간단했습니다. 모두 새 빌드의 변경 사항 때문입니다. 이제 FileOpen 함수의 경우 이전 버전에서와 같이 int가 아닌 uint 유형을 지정해야 합니다. 이와 같이:
 uint filehandle= FileOpen (filename, FILE_TXT || FILE_WRITE , "\r\n" );

이제 오류가 발생한 경우 함수는 -1이 아니라 0을 반환합니다.

 

간단한 Trelling Stop을 스케치했습니다. bez_Level - 트렐링 시작 레벨(포인트). TrallStep - 트랄링 단계. 마법 - 마법의 수.

문제는 EA가 여러 주문을 열 때 첫 번째 주문만 트리거된다는 것입니다. 그리고 첫 번째 주문이 종료되면 두 번째 주문이 시작됩니다. 오류는 쓰지 않습니다 ... 내가 무엇을 잘못했는지 이해할 수 없습니다. 감사해요...

int lim=OrdersTotal()-1;

for(int i=lim; i>=0; i--)
{
if(bez_Level>0)
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==매직)
{
if(주문 유형()==OP_SELL)
{
if((OrderOpenPrice()-Ask)>(Point*bez_Level))
{
if((OrderStopLoss()>(Ask+Point*bez_Level)+(Point*TallStep)) || (OrderStopLoss()==0))
{
//--- 주문 수정 및 종료
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*bez_Level,OrderTakeProfit(),0))
Print("트롤링 오류", GetLastError() );
}
}
}
if(주문 유형()==OP_BUY)
{
if((Bid-OrderOpenPrice()>Point*bez_Level))
{
if(OrderStopLoss()<Bid-(Point*bez_Level)-(Point*TallStep))
{
//--- 주문 수정
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*bez_Level,OrderTakeProfit(),0))
Print("트롤링 오류",GetLastError());
}
}

}

}
}
}
 

얘들아, 요점이 뭐야? 왜 Init에서 나오지 않습니까?

시작 항목이 없는 이유는 무엇입니까????????

 int init()
 {
   if (init_data()== false )error= true ;
   if (error== false )load_data();
   if (error== false )count_data();
   //if(error==true)Print("---------->>>>>>> ERORR!!! <<<<<<<<<--------------");
   setparam();
   Print ( "Инит завершён успешно" );
   return ( 0 );
 }

int start()
{
   // if(iTime(Symbol(),0,0) == prevtime) return(0);    //ждем нового бара
 //  prevtime = iTime(Symbol(),0,0);                   //если появился новый бар , включаемся    
   Print ( " Старт после нового бара" ); 
...
      
사유: