코딩 도움말 - 페이지 262

 

안녕하세요 mladen님

미칠 것 같아요. 여기 PeriodConverter에서 변경된 코드가 있습니다.

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

//| PeriodConverter.mq4 |

//| Copyright 2006-2014, MetaQuotes Software Corp. |

//| http://www.metaquotes.net |

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

#property copyright "2006-2014, MetaQuotes Software Corp."

#property link "http://www.mql4.com"

#property description "Period Converter to updated format of history base"

#property strict

#property show_inputs

#include

input int StartHour = 9;

input int StartMinute = 0;

input int CloseHour = 17;

input int CloseMinute = 30;

int ExtHandle=-1;

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

//| script program start function |

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

void OnStart()

{

datetime time0;

ulong last_fpos=0;

long last_volume=0;

int i,start_pos;

int hwnd=0,cnt=0;

//---- History header

int file_version=401;

string c_copyright;

string c_symbol=Symbol();

int i_period=Period();

int i_digits=Digits;

int i_unused[13];

MqlRates rate;

//---

ExtHandle=FileOpenHistory("TT_"+c_symbol+(string)i_period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);

if(ExtHandle<0)

return;

c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";

ArrayInitialize(i_unused,0);

//--- write history file header

FileWriteInteger(ExtHandle,file_version,LONG_VALUE);

FileWriteString(ExtHandle,c_copyright,64);

FileWriteString(ExtHandle,c_symbol,12);

FileWriteInteger(ExtHandle,i_period,LONG_VALUE);

FileWriteInteger(ExtHandle,i_digits,LONG_VALUE);

FileWriteInteger(ExtHandle,0,LONG_VALUE);

FileWriteInteger(ExtHandle,0,LONG_VALUE);

FileWriteArray(ExtHandle,i_unused,0,13);

//--- write history file

start_pos=Bars-1;

rate.open=Open[start_pos];

rate.low=Low[start_pos];

rate.high=High[start_pos];

rate.tick_volume=(long)Volume[start_pos];

rate.spread=0;

rate.real_volume=0;

//--- normalize open time

rate.time=Time[start_pos];

for(i=start_pos-1; i>=0; i--)

{

if(IsStopped())

break;

time0=Time;

//--- history may be updated

if(i==0)

{

//--- modify index if history was updated

if(RefreshRates())

i=iBarShift(NULL,0,time0);

}

//---

if((time0>=rate.time || i==0) && MainTime(time0)==true)

{

if(i==0)

{

rate.tick_volume+=(long)Volume[0];

if(rate.low>Low[0])

rate.low=Low[0];

if(rate.high<High[0])

rate.high=High[0];

rate.close=Close[0];

}

last_fpos=FileTell(ExtHandle);

last_volume=(long)Volume;

FileWriteStruct(ExtHandle,rate);

cnt++;

if(time0>=rate.time)

{

rate.time=time0;

rate.open=Open;

rate.low=Low;

rate.high=High;

rate.close=Close;

rate.tick_volume=last_volume;

}

}

else if(MainTime(time0)==true)

{

rate.tick_volume+=(long)Volume;

if(rate.low>Low)

rate.low=Low;

if(rate.high<High)

rate.high=High;

rate.close=Close;

}

}

FileFlush(ExtHandle);

Print(cnt," record(s) written");

//--- collect incoming ticks

datetime last_time=LocalTime()-5;

while(!IsStopped())

{

datetime cur_time=LocalTime();

//--- check for new rates

if(RefreshRates())

{

time0=Time[0];

FileSeek(ExtHandle,last_fpos,SEEK_SET);

//--- is there current bar?

if(time0<rate.time && MainTime(time0)==true)

{

rate.tick_volume+=(long)Volume[0]-last_volume;

last_volume=(long)Volume[0];

if(rate.low>Low[0])

rate.low=Low[0];

if(rate.high<High[0])

rate.high=High[0];

rate.close=Close[0];

}

else if(MainTime(time0)==true)

{

//--- no, there is new bar

rate.tick_volume+=(long)Volume[1]-last_volume;

if(rate.low>Low[1])

rate.low=Low[1];

if(rate.high<High[1])

rate.high=High[1];

//--- write previous bar remains

FileWriteStruct(ExtHandle,rate);

last_fpos=FileTell(ExtHandle);

//----

rate.time=time0;

rate.open=Open[0];

rate.low=Low[0];

rate.high=High[0];

rate.close=Close[0];

rate.tick_volume=(long)Volume[0];

last_volume=rate.tick_volume;

}

//----

FileWriteStruct(ExtHandle,rate);

FileFlush(ExtHandle);

//---

if(hwnd==0)

{

hwnd=WindowHandle(Symbol(),i_period);

if(hwnd!=0)

Print("Chart window detected");

}

//--- refresh window not frequently than 1 time in 2 seconds

if(hwnd!=0 && cur_time-last_time>=2)

{

PostMessageA(hwnd,WM_COMMAND,33324,0);

last_time=cur_time;

}

}

Sleep(50);

}

//---

}

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

//| |

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

void OnDeinit(const int reason)

{

//---

if(ExtHandle>=0)

{

FileClose(ExtHandle);

ExtHandle=-1;

}

//---

}

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

bool MainTime(datetime time0)

{

datetime temp = time0 - 1 * 60 *60;

if(((TimeHour(temp) == StartHour && TimeMinute(temp) >= StartMinute) ||

TimeHour(temp) > StartHour) &&

(TimeHour(temp)< CloseHour ||

(TimeHour(temp) == CloseHour && TimeMinute(temp) < CloseMinute)))

{

Print(".......return (true) - Time0 = "+TimeToString(time0) + " tempTime = "+TimeToString(temp));

return(true);

}

else

{

Print("+++++++false - Time0 = "+TimeToString(time0) + " tempTime = "+TimeToString(temp));

return(false);

}

}

새로운 오프라인 차트에 표시할 막대를 선택하기 위해 MainTime 함수 를 추가했습니다.

(나는 또한 한 시간 동안 시간을 옮겼지만 그것은 중요하지 않습니다).

이제 0:00(시작 시간) - 12:00(종료 시간)에 15046개의 막대(M5)가 있는 차트에서 이것을 테스트할 때

나는 올바른 인쇄 메시지를 받고 있으며 결국 7596개의 막대가 작성되었다는 정보를 얻었습니다.

그래서 원래 차트에서 약 절반이고 모든 것이 잘 작동했다고 생각합니다!

그러나 해당 오프라인 차트를 열면 모든 막대가 있는 원래 차트와 똑같이 보입니다.

저 행동이 정말 이해가 안가요?!?!

 
sunshineh:
안녕하세요 mladen님

미칠 것 같아요. 여기 PeriodConverter에서 변경된 코드가 있습니다.

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

//| PeriodConverter.mq4 |

//| Copyright 2006-2014, MetaQuotes Software Corp. |

//| http://www.metaquotes.net |

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

#property copyright "2006-2014, MetaQuotes Software Corp."

#property link "http://www.mql4.com"

#property description "Period Converter to updated format of history base"

#property strict

#property show_inputs

#include

input int StartHour = 9;

input int StartMinute = 0;

input int CloseHour = 17;

input int CloseMinute = 30;

int ExtHandle=-1;

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

//| script program start function |

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

void OnStart()

{

datetime time0;

ulong last_fpos=0;

long last_volume=0;

int i,start_pos;

int hwnd=0,cnt=0;

//---- History header

int file_version=401;

string c_copyright;

string c_symbol=Symbol();

int i_period=Period();

int i_digits=Digits;

int i_unused[13];

MqlRates rate;

//---

ExtHandle=FileOpenHistory("TT_"+c_symbol+(string)i_period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);

if(ExtHandle<0)

return;

c_copyright="(C)opyright 2003, MetaQuotes Software Corp.";

ArrayInitialize(i_unused,0);

//--- write history file header

FileWriteInteger(ExtHandle,file_version,LONG_VALUE);

FileWriteString(ExtHandle,c_copyright,64);

FileWriteString(ExtHandle,c_symbol,12);

FileWriteInteger(ExtHandle,i_period,LONG_VALUE);

FileWriteInteger(ExtHandle,i_digits,LONG_VALUE);

FileWriteInteger(ExtHandle,0,LONG_VALUE);

FileWriteInteger(ExtHandle,0,LONG_VALUE);

FileWriteArray(ExtHandle,i_unused,0,13);

//--- write history file

start_pos=Bars-1;

rate.open=Open[start_pos];

rate.low=Low[start_pos];

rate.high=High[start_pos];

rate.tick_volume=(long)Volume[start_pos];

rate.spread=0;

rate.real_volume=0;

//--- normalize open time

rate.time=Time[start_pos];

for(i=start_pos-1; i>=0; i--)

{

if(IsStopped())

break;

time0=Time;

//--- history may be updated

if(i==0)

{

//--- modify index if history was updated

if(RefreshRates())

i=iBarShift(NULL,0,time0);

}

//---

if((time0>=rate.time || i==0) && MainTime(time0)==true)

{

if(i==0)

{

rate.tick_volume+=(long)Volume[0];

if(rate.low>Low[0])

rate.low=Low[0];

if(rate.high<High[0])

rate.high=High[0];

rate.close=Close[0];

}

last_fpos=FileTell(ExtHandle);

last_volume=(long)Volume;

FileWriteStruct(ExtHandle,rate);

cnt++;

if(time0>=rate.time)

{

rate.time=time0;

rate.open=Open;

rate.low=Low;

rate.high=High;

rate.close=Close;

rate.tick_volume=last_volume;

}

}

else if(MainTime(time0)==true)

{

rate.tick_volume+=(long)Volume;

if(rate.low>Low)

rate.low=Low;

if(rate.high<High)

rate.high=High;

rate.close=Close;

}

}

FileFlush(ExtHandle);

Print(cnt," record(s) written");

//--- collect incoming ticks

datetime last_time=LocalTime()-5;

while(!IsStopped())

{

datetime cur_time=LocalTime();

//--- check for new rates

if(RefreshRates())

{

time0=Time[0];

FileSeek(ExtHandle,last_fpos,SEEK_SET);

//--- is there current bar?

if(time0<rate.time && MainTime(time0)==true)

{

rate.tick_volume+=(long)Volume[0]-last_volume;

last_volume=(long)Volume[0];

if(rate.low>Low[0])

rate.low=Low[0];

if(rate.high<High[0])

rate.high=High[0];

rate.close=Close[0];

}

else if(MainTime(time0)==true)

{

//--- no, there is new bar

rate.tick_volume+=(long)Volume[1]-last_volume;

if(rate.low>Low[1])

rate.low=Low[1];

if(rate.high<High[1])

rate.high=High[1];

//--- write previous bar remains

FileWriteStruct(ExtHandle,rate);

last_fpos=FileTell(ExtHandle);

//----

rate.time=time0;

rate.open=Open[0];

rate.low=Low[0];

rate.high=High[0];

rate.close=Close[0];

rate.tick_volume=(long)Volume[0];

last_volume=rate.tick_volume;

}

//----

FileWriteStruct(ExtHandle,rate);

FileFlush(ExtHandle);

//---

if(hwnd==0)

{

hwnd=WindowHandle(Symbol(),i_period);

if(hwnd!=0)

Print("Chart window detected");

}

//--- refresh window not frequently than 1 time in 2 seconds

if(hwnd!=0 && cur_time-last_time>=2)

{

PostMessageA(hwnd,WM_COMMAND,33324,0);

last_time=cur_time;

}

}

Sleep(50);

}

//---

}

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

//| |

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

void OnDeinit(const int reason)

{

//---

if(ExtHandle>=0)

{

FileClose(ExtHandle);

ExtHandle=-1;

}

//---

}

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

bool MainTime(datetime time0)

{

datetime temp = time0 - 1 * 60 *60;

if(((TimeHour(temp) == StartHour && TimeMinute(temp) >= StartMinute) ||

TimeHour(temp) > StartHour) &&

(TimeHour(temp)< CloseHour ||

(TimeHour(temp) == CloseHour && TimeMinute(temp) < CloseMinute)))

{

Print(".......return (true) - Time0 = "+TimeToString(time0) + " tempTime = "+TimeToString(temp));

return(true);

}

else

{

Print("+++++++false - Time0 = "+TimeToString(time0) + " tempTime = "+TimeToString(temp));

return(false);

}

}

새로운 오프라인 차트에 표시할 막대를 선택하기 위해 MainTime 함수를 추가했습니다.

(나는 또한 한 시간 동안 시간을 옮겼지만 그것은 중요하지 않습니다).

이제 0:00(시작 시간) - 12:00(종료 시간)에 15046개의 막대(M5)가 있는 차트에서 이것을 테스트할 때

나는 올바른 인쇄 메시지를 받고 있으며 결국 7596개의 막대가 작성되었다는 정보를 얻었습니다.

그래서 원래 차트에서 약 절반이고 모든 것이 잘 작동했다고 생각합니다!

그러나 해당 오프라인 차트를 열면 모든 막대가 있는 원래 차트와 똑같이 보입니다.

저 행동이 정말 이해가 안가요?!?!

심볼의 원래 이름 광고 시간대를 사용하고 있기 때문입니다. 기호 이름이나 시간 프레임을 변경해야 합니다(시간 프레임을 변경하는 것이 더 낫습니다. 그렇게 하면 모든 코드에서 올바른 기호 이름을 인식해야 함).

시간 프레임을 변경하는 경우 일부 "법적" 시간 프레임(1,5,15,30,60,...)을 사용하지 않도록 하십시오.

 

안녕,

이 EA는 다른 EA와 함께 지분 보호에 사용됩니다. 자기자본의 손익 한도를 입력할 수 있으며 한도에 도달하면 ea가 모든 주문을 닫고 다른 EA를 닫습니다.

ea 에퀴티 가드의 문제점은 mt4가 최대화될 때만 작동한다는 것입니다. 최소화되거나 mt4가 VPS 에서 실행 중인 경우 한도에 도달하면 EA를 최대화하거나 VPS에 로그인할 때까지 EA가 주문 마감을 시작하지 않습니다. 내가 로그인하거나 최대화하는 순간 닫기 시작합니다.

Thnx.

파일:
 
DarkForex33:
안녕,

이 EA는 다른 EA와 함께 지분 보호에 사용됩니다. 자기자본의 손익 한도를 입력할 수 있으며 한도에 도달하면 ea가 모든 주문을 닫고 다른 EA를 닫습니다.

ea 에퀴티 가드의 문제점은 mt4가 최대화될 때만 작동한다는 것입니다. 최소화되거나 mt4가 VPS에서 실행 중인 경우 한도에 도달하면 EA를 최대화하거나 VPS에 로그인할 때까지 EA가 주문 마감을 시작하지 않습니다. 내가 로그인하거나 최대화하는 순간 닫기 시작합니다.

Thnx.

PC(VPS 아님)에서 동일한 방식으로 작동합니까?

동일한 조건의 PC에서 정상적으로 작동하면 VPS 에 문제가 있는 것입니다.

 
mladen:
심볼의 원래 이름 광고 시간대를 사용하고 있기 때문입니다. 기호 이름이나 시간 프레임을 변경해야 합니다(시간 프레임을 변경하는 것이 더 낫습니다. 그렇게 하면 모든 코드가 올바른 기호 이름을 인식해야 합니다). 시간 프레임(1,5,15,30,60,...)

덕분에 달라졌어요

ExtHandle=FileOpenHistory("TT_"+c_symbol+(string)3+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);

and

FileWriteInteger(ExtHandle,3,LONG_VALUE);

하지만 오프라인 차트를 열면 ...,M3 "업데이트 대기 중"만 표시되고... 아무 일도 일어나지 않습니다.

 
sunshineh:
덕분에 달라졌어요

ExtHandle=FileOpenHistory("TT_"+c_symbol+(string)3+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ|FILE_ANSI);

and

FileWriteInteger(ExtHandle,3,LONG_VALUE);

하지만 오프라인 차트를 열면 ...,M3 "업데이트 대기 중"만 표시되고... 아무 일도 일어나지 않습니다.

흥미로운

이것을 지표의 기초로 사용하십시오. 이것은 작동합니다 (기본으로 사용한 버전에 오류가있는 것 같습니다)

파일:
 

도와 줘요! 이 에이를 위해

인사말

제발 전문가

EA 손절매 설정

gaps.ex4

갭.mq4

파일:
gaps.ex4  6 kb
gaps.mq4  4 kb
 

여보세요,

첨부된 지표에 DEMA 옵션을 추가하는 것을 도울 수 있습니까?

현재 옵션은 다음과 같습니다.

0= 스마

1=에마

2=smma

3=루마

추가하고 싶은 사항:

4= DEMA 이것이 가능합니까? 감사합니다!

 
MrWigglesworth:
여보세요,

첨부된 지표에 DEMA 옵션을 추가하는 것을 도울 수 있습니까?

현재 옵션은 다음과 같습니다.

0= 스마

1=에마

2=smma

3=루마

추가하고 싶은 사항:

4= DEMA 이것이 가능합니까? 감사합니다!

미스터위글스워스

다음은 유형 4로 dema가 추가된 버전입니다. ma__dema_crossover_with_arrow_and_email.mq4

 
amirreza132:
인사말

제발 전문가

EA 손절매 설정

gaps.ex4

갭.mq4

아미레자132

EA는 격차를 잡기 위해 설계되었으며 격차가 발생할 경우 이미 수익을 내고 있습니다.