Hilfe bei der Codierung - Seite 262

 

Hallo mladen,

ich glaube ich werde verrückt, hier ist mein geänderter Code vom 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);

}

}

Ich habe die Funktion MainTime hinzugefügt, um die Balken auszuwählen, die ich in meinem neuen Offline-Chart anzeigen möchte.

(Ich habe auch die Zeit um eine Stunde verschoben, aber das ist nicht wichtig).

Wenn ich dies nun auf einem Chart mit 15046 Bars (M5) von 0:00 (Starttime) - 12:00 (Closetime) teste

erhalte ich korrekte Drucknachrichten und am Ende die Info, dass 7596 Balken geschrieben wurden.

Es ist also etwa die Hälfte des ursprünglichen Charts und ich denke, dass alles gut funktioniert hat!

Aber wenn ich den entsprechenden Offline-Chart öffne, sieht er genauso aus wie der Original-Chart mit allen Balken.

Ich kann dieses Verhalten nicht wirklich verstehen?!?!

 
sunshineh:
Hallo mladen,

Ich glaube, ich werde verrückt, hier ist mein geänderter Code aus dem 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);

}

}

Ich habe die Funktion MainTime hinzugefügt, um die Balken auszuwählen, die ich in meinem neuen Offline-Diagramm anzeigen möchte.

(Ich habe auch die Zeit um eine Stunde verschoben, aber das ist nicht wichtig).

Wenn ich dies nun auf einem Chart mit 15046 Bars (M5) von 0:00 (Starttime) - 12:00 (Closetime) teste

erhalte ich korrekte Drucknachrichten und am Ende die Info, dass 7596 Balken geschrieben wurden.

Es ist also etwa die Hälfte des ursprünglichen Charts und ich denke, dass alles gut funktioniert hat!

Aber wenn ich den entsprechenden Offline-Chart öffne, sieht er genauso aus wie der Original-Chart mit allen Balken.

Ich kann dieses Verhalten wirklich nicht verstehen?!?!

Das liegt daran, dass Sie den ursprünglichen Namen und den Zeitrahmen des Symbols verwenden. Sie müssen entweder den Symbolnamen oder den Zeitrahmen ändern (besser ist es, den Zeitrahmen zu ändern, damit Ihr Code den richtigen Symbolnamen erkennt).

Wenn Sie den Zeitrahmen ändern, stellen Sie sicher, dass Sie keine "legalen" Zeitrahmen verwenden (1,5,15,30,60,...)

 

Hallo,

Diese ea ist für Eigenkapitalschutz in Kombination mit anderen ea verwendet. Sie können Gewinn- und Verlustlimits des Eigenkapitals eingeben und wenn das Limit erreicht ist, wird ea alle Aufträge schließen und andere EA schließen.

Das Problem mit ea Equity Guard ist, dass es nur funktioniert, wenn mt4 maximiert ist. Wenn seine minimiert oder mt4 läuft auf VPS, wenn das Limit getroffen wird EA wird nicht beginnen Schließen von Aufträgen, bis ich EA maximieren oder Login auf VPS. In dem Moment, in dem ich mich einlogge oder den EA maximiere, beginnt er zu schließen.

Thnx.

Dateien:
 
DarkForex33:
Hallo!

Dieses Ea wird zum Schutz des Eigenkapitals in Kombination mit anderen Eas verwendet. Sie können Gewinn- und Verlustlimits des Eigenkapitals eingeben und wenn das Limit erreicht ist, wird ea alle Aufträge schließen und andere EA schließen.

Das Problem mit ea Equity Guard ist, dass es nur funktioniert, wenn mt4 maximiert ist. Wenn seine minimiert oder mt4 läuft auf VPS, wenn das Limit getroffen wird EA wird nicht beginnen Schließen von Aufträgen, bis ich EA maximieren oder Login auf VPS. In dem Moment, in dem ich mich einlogge oder den EA maximiere, beginnt EA mit dem Schließen.

Danke.

Verhält es sich genauso auf Ihrem PC (nicht auf dem VPS)?

Wenn es auf Ihrem PC unter den gleichen Bedingungen gut funktioniert, dann haben Sie ein Problem mit Ihrem VPS.

 
mladen:
Das liegt daran, dass Sie den ursprünglichen Namen und Zeitrahmen des Symbols verwenden. Sie müssen entweder den Namen des Symbols oder den Zeitrahmen ändern (besser ist es, den Zeitrahmen zu ändern, damit Ihr Code den richtigen Symbolnamen erkennt). Wenn Sie den Zeitrahmen ändern, stellen Sie sicher, dass Sie keine "legalen" Zeitrahmen verwenden (1,5,15,30,60,...)

Danke, ich habe geändert

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);

Aber wenn ich das Offline-Chart öffne ...,M3 zeigt es nur "Waiting for Updates"... und nichts passiert

 
sunshineh:
Danke, ich habe geändert

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);

Aber wenn ich das Offline-Chart öffne ...,M3 zeigt es nur "Waiting for Updates"... und nichts passiert

Interessant

Verwenden Sie diese Version als Grundlage für Ihren Indikator. Dieser funktioniert (die Version, die Sie als Grundlage verwendet haben, scheint Fehler zu enthalten)

Dateien:
 

Helfen Sie mir! für diese ea

Grüße

Bitte Experten

in EA Stop-Loss und Take-Profit setzen

gaps.ex4

gaps.mq4

Dateien:
gaps.ex4  6 kb
gaps.mq4  4 kb
 

Hallo,

können Sie helfen, eine DEMA-Option zu dem beigefügten Indikator hinzuzufügen?

Derzeit sind die Optionen:

0= sma

1=ema

2=smma

3=lwma

Ich würde gerne hinzufügen:

4= DEMAIist dies möglich?Ich danke Ihnen sehr!

 
MrWigglesworth:
Hallo,

Können Sie helfen, dem beigefügten Indikator eine DEMA-Option hinzuzufügen?

Derzeit sind die Optionen:

0= sma

1=ema

2=smma

3=lwma

Möchte hinzufügen:

4= DEMAIist dies möglich?Ich danke Ihnen sehr!

MrWigglesworth

Hier ist eine Version, bei der dema als Typ 4 hinzugefügt wurde: ma__dema_crossover_with_arrow_and_email.mq4

 
amirreza132:
Grüße

Bitte Experten

in EA Stop-Loss und Take-Profit setzen

gaps.ex4

gaps.mq4

amirreza132

Dieser EA wurde entwickelt, um Gaps zu fangen, und er hat bereits einen Take Profit für den Fall, dass das Gap passiert