Помощь в кодировании - страница 262

 

Привет, Младен,

Мне кажется, я схожу с ума, вот мой измененный код из 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 для выбора баров, которые я хочу показать на моем новом автономном графике.

(Я также переместил время на час, но это не важно).

Теперь, когда я тестирую это на графике с 15046 барами (M5) с 0:00 (Starttime) до 12:00 (Closetime).

я получаю корректные печатные сообщения и в конце информацию, что было записано 7596 баров.

То есть это примерно половина от исходного графика, и поэтому я думаю, что все работает нормально!

Но когда я открываю соответствующий автономный график, он выглядит точно так же, как и оригинальный график со всеми барами.

Я не могу понять такое поведение!!!!

 
sunshineh:
Привет, Младен,

Мне кажется, я схожу с ума, вот мой измененный код из 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 для выбора баров, которые я хочу показать на моем новом автономном графике.

(Я также сдвинул время на час, но это не важно).

Теперь, когда я тестирую это на графике с 15046 барами (M5) с 0:00 (Starttime) до 12:00 (Closetime).

я получаю корректные печатные сообщения и в конце информацию, что было записано 7596 баров.

То есть это примерно половина от исходного графика, и поэтому я думаю, что все работает нормально!

Но когда я открываю соответствующий автономный график, он выглядит точно так же, как и оригинальный график со всеми барами.

Я не могу понять такое поведение?!?!!

Это потому, что вы используете оригинальное имя и таймфрейм символа. Вам нужно изменить либо имя символа, либо таймфрейм (лучше изменить таймфрейм, тогда весь ваш код будет распознавать правильное имя символа).

Если вы меняете таймфрейм, убедитесь, что вы не используете некоторые "законные" таймфреймы (1,5,15,30,60,...).

 

Привет,

Этот советник используется для защиты капитала в комбинации с другими советниками. Вы можете ввести лимиты прибыли и убытков по эквити, и когда лимит будет достигнут, ea закроет все ордера и закроет другого эксперта.

Проблема с ea equity guard в том, что он работает только когда mt4 максимизирован. Если он минимизирован или mt4 работает на VPS, то при достижении лимита советник не начнет закрывать ордера, пока я не максимизирую советник или не войду на VPS. Как только я вхожу в систему или максимизирую советник начинает закрывать ордера.

Спасибо.

Файлы:
 
DarkForex33:
Привет,

Этот советник используется для защиты капитала в комбинации с другими советниками. Вы можете ввести лимиты прибыли и убытков по эквити, и когда лимит будет достигнут, ea закроет все ордера и закроет другого советника.

Проблема с ea equity guard в том, что он работает только когда mt4 максимизирован. Если он минимизирован или mt4 работает на VPS, то при достижении лимита советник не начнет закрывать ордера, пока я не максимизирую советник или не войду на VPS. Как только я вхожу в систему или максимизирую советник начинает закрывать ордера.

Спасибо.

Ведет ли он себя так же на вашем ПК (не VPS)?

Если он работает нормально на вашем ПК в тех же условиях, тогда у вас проблема с вашим 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

Приветствую вас

Пожалуйста, эксперты

установить в советнике стоп лосс и тейк профит

гэпы.ex4

gaps.mq4

Файлы:
gaps.ex4  6 kb
gaps.mq4  4 kb
 

Здравствуйте,

Не могли бы вы помочь добавить опцию DEMA в прилагаемый индикатор?

В настоящее время опции следующие:

0= sma

1=ema

2=smma

3=lwma

Хотелось бы добавить:

4= DEMAI возможноли это?Большое спасибо!

 
MrWigglesworth:
Здравствуйте,

Не могли бы вы помочь добавить опцию DEMA к прилагаемому индикатору?

В настоящее время опции следующие:

0= sma

1=ema

2=smma

3=lwma

Хотелось бы добавить:

4= DEMAI возможноли это?Большое спасибо!

MrWigglesworth

Вот версия с добавлением dema в качестве типа 4: ma__dema_crossover_with_arrow_and_email.mq4

 
amirreza132:
Приветствую

Пожалуйста, эксперты

установить в советнике стоп лосс и тейк профит

гэпы.ex4

gaps.mq4

amirreza132

Этот советник предназначен для ловли гэпов, и он уже имеет тейк-профит в случаях, когда происходит гэп.

Причина обращения: