묻다! - 페이지 157

 

다음과 같이 시도하십시오.

string uniqueFileName()

{

string sname=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);

string tname="";

for (int i=0;i<StringLen(sname);i++)

{

string char = StringSubstr(sname,i,1);

if (char!="." && char!=":")

if (char==" ")

tname = tname+"_";

else tname = tname+char;

}

return(tname+"_"+Symbol()+Period()+".csv");

}[/php]this one adds hour, minute and seconds in the middle to make it more or less unique (so something like this " 20090924_102541_EURUSD15.csv "). To make it really sure that the file does not exist it would have to be a bit more complicated (something like this :

[php]string uniqueFileName()

{

string sname=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);

string tname="";

int thand;

for (int i=0;i<StringLen(sname);i++)

{

string char = StringSubstr(sname,i,1);

if (char!="." && char!=":")

if (char==" ")

tname = tname+"_";

else tname = tname+char;

}

//

//

//

//

//

tname = tname+"_"+Symbol()+Period()+".csv";

thand = FileOpen(tname,FILE_BIN|FILE_READ);

if (thand==-1)

return(tname);

else

{

FileClose(thand);

return("failed to make unique name");

}

}

실패하면 " 고유 이름을 만들지 못했습니다 " 문자열을 반환합니다. 이 경우 다시 시도할 횟수를 결정해야 합니다.

추신: 사용법은 someFileName=uniqueFileName();

문안 인사

믈라덴

tedalagi:
안녕 모두,

나는 상인이지만 mq4 언어에 대해 알지 못하고 화요일부터 이것을하려고했습니다 ...

스크립트를 사용하여 차트를 csv 형식으로 저장해야 합니다. 모든 차트와 시간 프레임에서 간단히 드래그할 수 있는 멋진 스크립트가 있으며 파일 이름을 제외하고는 훌륭합니다.

같은 폴더에 다른 파일을 저장할 때마다 이름을 바꿀 필요가 없도록 차트를 저장할 때마다 고유한 파일 이름을 자동으로 생성할 수 있기를 바랍니다.

string fname = [YYYYMMDD 형식의 날짜] + "_"+ [날짜 - 시간만] +"_" + Symbol() + 마침표() + ".csv";

문제의 코드는 굵게 표시되어 있습니다.

코드가 올바르면 출력 파일 이름이 다음과 같이 보일 것입니다.

20090924_10_GBPJPY15.csv

이 거대한 스레드의 157 페이지를 읽는 데 많은 시간을 할애하지 못해 죄송합니다 (나는 시도했지만 머리가 어지러워졌습니다)

미리 감사드립니다.
 
 
 
mladen:
다음과 같이 사용하십시오(mql은 중첩 함수 또는 프로시저를 허용하지 않으므로 함수 또는 프로시저가 별도의 것이어야 함)

그것은 완벽하게 작동합니다, 대단히 감사합니다.

믈라덴:

파일 저장 중 : 예, Windows API를 사용하여 수행할 수 있습니다. 다음은 좋은 예와 이를 수행하는 방법에 대한 좋은 설명이 있는 링크입니다. WinAPI를 통한 파일 작업 - MQL4 기사

나는 그것에 대해 배우고 나중에 이 스레드로 확실히 돌아올 것입니다.

신의 축복이 있기를.

 

"중복 항목": 내 프로그램이 작동하지 않는 이유는 무엇입니까?

죄송합니다. 이전에 게시했지만 포럼에서 게시물을 재배치할 수 없습니다.

(또한 내 컴퓨터 기록에서 "북마크"를 허용하지 않습니다...)

여하튼: 두 개의 연속 막대가 "위" 또는 "아래"인지 테스트하는 간단한 프로그램을 작성했습니다.

예: "위"에서 bar1의 고점은 bar2보다 높고 막대 1의 저점

또한 bar2보다 높습니다. (아래는 대칭입니다.)

prog는 브레이크아웃과 함께 작동하므로 "위"에서 bar1의 최고점에서 최저점을 뺀 것입니다.

bar2의 값은 임계값보다 높아야 합니다. ("아래"는 대칭입니다.)

이제 M30 GBPUSD로 작동합니다. 안구로 이 ""돌파 임계값"을 선택했습니다.

TakeProfit의 경우도 마찬가지입니다. StopLoss는 프로그램에 표시된 대로입니다.

그래서: MetaTrader 및 mql4로 경험을 얻으려고 합니다.

그런 다음 다른 프로그램을 시도하고 최적화하는 등의 작업을 수행할 수 있습니다.

그래서: 프로그램을 컴파일하고 전략 테스터 에서 실행하는 것까지 얻었습니다.

그러나 프로그램의 후반부로 내려가거나 인쇄하지 않습니다.

주문을 입력했습니다.

경험이 있는 사람에게는 내가 가진 오류가 무엇이든 분명할 것입니다.

그것은 나에게 자명하지 않습니다.

그래서: 이것을 도와줄 수 있습니까?

감사해요.

프로그램이 따릅니다.

//+----------------------------------------------- -------------------+

//| 전문가 초기화 기능 |

//+----------------------------------------------- -------------------+

정수 초기화()

{

//----

//----

리턴(0);

}

//+----------------------------------------------- -------------------+

//| 전문가 초기화 해제 기능 |

//+----------------------------------------------- -------------------+

정수 초기화()

{

//----

//----

리턴(0);

}

//+----------------------------------------------- -------------------+

//| 전문가 시작 기능 |

//+----------------------------------------------- -------------------+

정수 시작()

{

//----

bool TrendUp1; 이중 TakeProfitUp; 이중 EE = .00500;

bool OrdTot_OK;더블 로트;더블 슬립;

더블 SL_Trailing_Up;bool High2Up;bool Low2Up;

int ticketup;int ticketdown;bool DownAndBig; 부울 UpAndBig;

bool TrendDown; 이중 SL_Trailing_Down; 이중 TakeProfitDown;

부울 High2down; 부울 Low2down;

정수 ABC = OrdersTotal();

더블 Size1 = .00630;bool BigUp; 이중 A = 높음[1], 이중 B= 낮음[2];

이중 C= 높음[2]; 이중 D= 낮음[1];bool BigDown;

//------------------------다운 주문 시작

if (ABC == 0)// 어떤 주문도 참이 아님

OrdTot_OK = 참;

if (ABC == 0)// 어떤 주문도 참이 아님

인쇄("다운 주문 순서에서 주문이 나오지 않았습니다");

if ((CD) > Size1)//높은 2보다 작은 1 > .0063

빅다운 = 사실;

if ((CD) > Size1)//높은 2보다 작은 1 > .0063

인쇄("하향 주문 시퀀스에서 큰 고장을 찾았습니다");

if (높음[1]< 높음[2])

High2down=참;

if (높음[1]< 높음[2])

인쇄("하향 순서에서 연속 막대가 감소하는 고점을 가짐");

if(낮음[1]< 낮음[2])

Low2down=참;

if(낮음[1]< 낮음[2])

인쇄("하향 순서에서 연속 막대가 감소하는 최저값");

if (High2down && Low2down)

TrendDown=참;

if (High2down && Low2down)

인쇄("하향 순서 시퀀스에서 TrendDown 플래그가 설정됨");

if (추세)

SL_Trailing_Down = 높음[1];

if (추세)

인쇄("다운 주문 순서에서 stop_loss를 설정했습니다");

if (추세)

TakeProfitDown = 입찰가 - (.005);

if (추세)

인쇄("다운 주문 순서에 따라 이익을 얻었습니다", TakeProfitDown);

if (TrendDown && BigDown)

DownAndBig = 사실;

if (DownAndBig && OrdTot_OK)

ticketdown= OrderSend(Symbol(),OP_SELL,lot, Bid,slip,SL_Trailing_Down,TakeProfitDown,Blue);

if (DownAndBig && OrdTot_OK)

인쇄("다운 주문 순서에 따라 티켓 입력을 시도했습니다", ticketdown);

if (티켓다운 < 0)

Print("OrderSend_Down이 #오류로 실패했습니다.",GetLastError());

리턴(0);

//---------------------------------------------다운 순서 완료

//------------------------------------------------ ---업 주문 시작

만약 (ABC == 0)

OrdTot_OK = 참;

만약 (ABC == 0)

인쇄("가는 순서에서 주문이 나오지 않았습니다");

((A - B) > 크기1)인 경우

빅업 = 사실;

((A - B) > 크기1)인 경우

인쇄("가는 순서에서 두 막대에 대한 크기 테스트는 정상이었습니다");

경우 (높음[1] > 높음[2])

High2Up = true;//44

경우 (높음[1] > 높음[2])

인쇄("가는 순서에서 최고점 증가에 대한 테스트는 정상이었습니다");

if(낮음[1] > 낮음[2])

Low2Up=참;

if(낮음[1] > 낮음[2])

인쇄("가는 순서에서 최저점 증가에 대한 테스트는 양호했습니다");

if (High2Up && Low2Up)

TrendUp1=참;

if (High2Up && Low2Up)

Print("위로 올라가는 순서에서 위로 가기 위한 플래그를 설정했습니다");

if (TrendUp1)

SL_Trailing_Up = 낮음[1] ;

if (TrendUp1)

인쇄("가는 순서에서 손절매를 설정했습니다");

if (TrendUp1)

TakeProfitUp = 묻기 + (.005);

if (TrendUp1)

인쇄("가는 순서로 수익 창출 설정", TakeProfitUp);

if (TrendUp1 && BigUp)

UpAndBig = 사실;

if ( UpAndBig && OrdTot_OK)

ticketup = OrderSend(Symbol(), OP_BUY, lot, Ask,slip, SL_Trailing_Up,TakeProfitUp,Red);

if (UpAndBig && OrdTot_OK)

Print("올라가는 순서대로, 주문을 보내려고 시도했습니다", ticketup);

if (티켓업 < 0)

Print("OrderSend_Up이 오류 #로 실패했습니다.",GetLastError());

리턴(0);

//------------------------------------------------ -업 주문 완료

//----

return(0); // 이 줄은 불필요할 수 있습니다.

//+----------------------------------------------- -------------------+

//----

리턴(0);

}

//+----------------------------------------------- -------------------+

 

여러 CharToStr 사용????

나는 두 개의 날개 캐릭터 를 배치하고 싶습니다. 하나는 다른 것 위에 있습니다. 이것은 첫 번째 문자-----ObjectSetText("signal"+x+"0",CharToStr(104),symbolSize,"Wingdings",Yellow);를 설정하는 데 사용하는 코드입니다.

(236)을 추가하고 다른 색상을 사용하고 싶습니다.

할 수 있습니까? 그렇다면 도와주세요.

찾아주셔서 감사합니다,

지버17

 

수면 | IsTradeContextBusy

CodeMasters와 나머지 모든 분들께 인사드립니다!

Fractals를 기반으로 하는 EA가 있으며 D1 기간에 1개의 MT4 플랫폼과 여러 통화 쌍 에서 사용됩니다.

동시에 두 개 이상의 EA 거래 사본이 있으므로 저널에 ''Trade Context Is Busy'' 알림이 표시됩니다.

내 EA에 Sleep 또는 IsTradeContextBusy 기능을 삽입하고 싶지만 어디에 넣어야 할지 모르겠습니다:

- Send order 기능 이후에 Sell과 Buy 기능을 별도로?

- 매도와 매수 모두 주문 후 발송 기능은?

- 이 문제를 해결하는 방법 -

if (IsTradeContextBusy() == true) 절전(5000); 반품;

???

조언을 하거나 해결책을 알려주세요.

당신의 도움을 주셔서 대단히 감사합니다,

즐거운 시간 보내세요,

시몬

EA 첨부.

 

조언이 필요합니다!

여보세요,

나는 돈을 잃고 있는 문제에 프로그래머가 도움을 주면 정말 감사할 것입니다. 특정 가격 수준에서 포지션을 열어야 하는 EA가 있지만 때때로 채찍톱으로 인해 너무 많은 포지션이 열릴 수 있습니다. 하나만 열렸으면 합니다. 누구든지 이 문제를 한 줄의 코드로 해결할 수 있는지 아니면 프로그래머를 고용해야 하는지 말해 줄 수 있습니까?

고맙습니다.

 

제발 조언

안녕하세요 여러분, 저는 MagicNumber가 어떻게 작동하는지 정말 잘 모르겠습니다. 작동하지 않는 것 같기 때문에???? 나는 2개의 간단한 EA를 첨부했고 아직 배우는 중입니다.

1. 가격이 100SMA 이상일 때 구매

2. 가격도 100SMA 이상일 때 매도

2개의 다른 Eurusd 차트 에 첨부할 때 하나의 매수와 하나의 매도가 동시에 이루어져야 함을 의미합니다. 이론상 각 EA는 독립적으로 작동합니다.

하지만 그렇지 않습니다... Sell이 1st를 실행할 때 Buy EA가 작동하지 않고 그 반대의 경우도 마찬가지인 것 같습니다.

누구든지 내 EA, 즉 MagicNumber를 제어할 수 있습니까? 잘못됐어?

정말 감사합니다

파일:
buy100ma.mq4  9 kb
sell100ma.mq4  9 kb
 
Ghosthand:
안녕하세요 여러분, 저는 MagicNumber가 어떻게 작동하는지 정말 잘 모르겠습니다. 작동하지 않는 것 같기 때문에???? 나는 2개의 간단한 EA를 첨부했고 아직 배우는 중입니다.

1. 가격이 100SMA 이상일 때 구매

2. 가격도 100SMA 이상일 때 매도

2개의 다른 Eurusd 차트에 첨부할 때 하나의 매수와 하나의 매도가 동시에 이루어져야 함을 의미합니다. 이론상 각 EA는 독립적으로 작동합니다.

하지만 그렇지 않습니다... Sell이 1st를 실행할 때 Buy EA가 작동하지 않고 그 반대의 경우도 마찬가지인 것 같습니다.

누구든지 내 EA, 즉 MagicNumber를 제어할 수 있습니까? 잘못됐어?

정말 감사합니다

매직넘버를 제대로 입력하신듯 합니다. 유일한 문제는 동일한 매직 넘버를 가진 주문이 현재 거래 풀에 존재하는지 확인 하지 않는다는 것입니다. 새로운 거래를 시작하기 전에 열려 있는 모든 주문을 살펴보고 OrderMagicNumber() == 마법 번호인지 확인해야 합니다.