Wie programmiert man? - Seite 115

 
matrixebiz:
Mache ich damit nicht das Gleiche?

if (Stunde() 17) TradeHour = false;

Das heißt, wenn die Stunde zwischen 12 und 17 liegt, ist TradeHour=true, richtig?

(Hinzufügen von && TradeHour in meiner Buy/Sell-Anweisung)

Negieren Sie die folgende Aussage:

if(Hour()>=12 && Hour()<17)

TradingEnabled=true;

[/CODE]

is

[CODE]

if(Hour()=17)

TradingEnabled=false;

 

Eine weitere Sache wie füge ich eine Wiedereinstiegsverzögerung in den Code, so dass, wenn ein Handel wurde gerade geöffnet und geschlossen, wie 60 min warten, dann wieder überprüfen, ob Handel Bedingungen noch erfüllt sind.

Dankeschön

 
matrixebiz:
Eine weitere Sache wie füge ich eine Wiedereinstiegsverzögerung in den Code ein, so dass, wenn ein Handel gerade eröffnet und geschlossen wurde, 60 Minuten gewartet wird, um dann erneut zu prüfen, ob die Handelsbedingungen noch erfüllt sind. Dankeschön

Es ist nicht klar, was Ihr Anliegen ist.

Möchten Sie 60 Minuten zwischen einer Prüfung der Handelsbedingungen und der nächsten warten?

Wenn dies Ihr Wunsch ist, sollte dies vielleicht funktionieren:

// Global variable

bool TradingEnabled = true; // flag to enable/disabled trading logic

bool TradingCheckDone = false; // flag to know if a a check was just done

datetime LastCheckTime = 0; // Time when the last check was done

.... somewhere in EA start() function ....

if( !TradingCheckDone )

{

// Default: We assume that trading logic must run ...

TradingEnabled = true;

// ... but only between 12:00:00 and 16:59:59

if(Hour()=17)

TradingEnabled=false;

// We must remember a check was just done

TradingCheckDone = true;

// We must even know when it was done

LastCheckTime = TimeCurrent();

} else

{

// if a hour has passed since the last check, it's time to retry

if( TimeCurrent() - LastCheckTime >= 3600 )

{

TradingCheckDone = false;

}

}

 
gorgoroth:
Es ist nicht klar, was Ihre Anfrage ist.

Möchten Sie 60 Minuten zwischen einer Prüfung der Handelsbedingungen und der nächsten warten?

Wenn das Ihr Wunsch ist, sollte das vielleicht funktionieren:

// Global variable

bool TradingEnabled = true; // flag to enable/disabled trading logic

bool TradingCheckDone = false; // flag to know if a a check was just done

datetime LastCheckTime = 0; // Time when the last check was done

.... somewhere in EA start() function ....

if( !TradingCheckDone )

{

// Default: We assume that trading logic must run ...

TradingEnabled = true;

// ... but only between 12:00:00 and 16:59:59

if(Hour()=17)

TradingEnabled=false;

// We must remember a check was just done

TradingCheckDone = true;

// We must even know when it was done

LastCheckTime = TimeCurrent();

} else

{

// if a hour has passed since the last check, it's time to retry

if( TimeCurrent() - LastCheckTime >= 3600 )

{

TradingCheckDone = false;

}

}

Nein, nur wenn ein Handel gerade passiert und geschlossen, dann möchte ich die EA zu warten, eine Stunde dann prüfen, ob Handel Bedingungen noch erfüllt sind, wenn sie sind, dann ok, Handel wieder, aber wenn nicht so sein es. Dieser Code wird tun, was ich dann will? Funktioniert das in der Testversion aufgrund der TimeCurrent-Prüfung?

EDIT: nicht jede Stunde die Prüfung kurz nach einem Handel geschlossen wird, dann warten Sie eine Stunde für eine Bedingung zu überprüfen und das ist es. Dann, wenn an einem Tag ein anderer Handel generiert und geschlossen wird, warten Sie wieder eine Stunde und wenn kein Signal, dann ist es nicht mehr warten überprüft, bis der nächste Handel öffnen und schließen.

Dankeschön

Beigefügt ist eine kleine EA, wenn Sie es mit den richtigen Einstellungen, die ich erwähnt ändern könnte. Danke

Dateien:
ozfx_method.mq4  11 kb
 

Buy_Limit und Buy_Stop

Was ist der Unterschied zwischen einer Limit-Order und einer Stop-Order?

Danke

 
gorgoroth:
Hallo zusammen,

Ich habe eine Reihe von Funktionen entwickelt, um Konfigurationseinstellungen von einem EA zu verwalten.

Diese Funktionen werden von einer C++-DLL exportiert und jede der exportierten Funktionen hat die __stdcall Aufruf convetion meine MQL4 angefordert.

Mein Problem tritt auf, wenn eine Funktion eine Zeichenkette an den EA zurückgeben muss.

Natürlich kann die Funktion nicht:

- einen Zeiger auf eine lokale Variable zurückgeben (Variable geht aus dem Bereich)

- einen Zeiger auf eine globale Variable der DLL zurückgeben (Probleme mit gleichzeitigem Zugriff)

- einen Zeiger auf eine im Heap zugewiesene Zeichenkette zurückgeben (Funktionen zum Freigeben von Speicher, die vom EA aufgerufen werden müssen: Dieser Ansatz gefällt mir nicht)

Also habe ich beschlossen, einen String und die Stringgröße aus dem EA zu übergeben. Es:

string buffer;

GetString( buffer, 30 );

[/CODE]

and from the c++ dll, something like this

void __stdcall GetString( LPTSTR buffer, int BufSize )

{

// Read a string from a some source

....

// -1 to take into account the terminating null character

StringCchCopy( buffer, BufSize-1, ReadStringFromASource );

}

[/CODE]

Here starts the weird behaviour of MQL managing strings returned from a DLL.

using the following code:

string buffer;

GetString( buffer, 30 );

the first time buffer contains the right string. A first question arises: buffer is not initialized but after calling GetString it contains the string returned. I have to suppose that MQL allocates space for a string variable when it's declared.

Next time GetString() is called the string returned seems to be truncated to the length-1 of the previous string length and not resetted as expected because of the 'string buffer;' statement.

Tried even:

[CODE]

string buffer = " "; // 'allocate' 30 blank characters

GetString( buffer, StringLen(buffer) );

but after the first time, when the execution returns to this code, the assignment of buffer does not work any more and buffer still contains the previous read string, and it seems it can only contains the number of characters of his content.

At first I have thought that the null character is not handled very well by MQL and modified the c++ code like this ...

[CODE]

CopyMemory( buffer, ReadStringFromASource, min(BufferSize,ReadStringFromASourceLength) );

und nicht das abschließende Null-Zeichen hinzuzufügen.

Aber wenn von MQL aufgerufen wird, ist keine Zeichenfolge überhaupt zurück.

Hat jemand eine Antwort?

Niemand hat Probleme zurückgeben Zeichenfolge aus DLLs?

 

Ich brauche Hilfe...

Kann mir jemand einen Code zeigen? zu meinem EA anhängen...

Ein Auftrag pro Signal.. weil manchmal habe ich 3 Signal wegen der verschiedenen TF.. ich will alle Signal zu öffnen...

oder einen Code, der einen Auftrag pro Bar nehmen würde, aber jeder Timeframe an einen EA anhängen... ich möchte nicht viele Charts öffnen...

 

Was stimmt nicht mit meinem BuyStop?

ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Distance*Point,Slippage,Bid-Distance-StopLoss*Point,Ask+Distance+TakeProfit*Point,"",MagicNumber,0,Blue);

 
matrixebiz:
Was ist mit meinem BuyStop falsch?

ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Distance*Point,Slippage,Bid-Distance-StopLoss*Point,Ask+Distance+TakeProfit*Point,"",MagicNumber,0,Blue);

Ihren Stop-Loss und Take-Profit...

Sie sollten auch *Punkt zu Ihrem Abstand addieren, bevor Sie ihn hinzufügen...

ODER

Bid-((Abstand-StopLoss)*Punkt),Ask+((Abstand+TakeProfit)*Punkt)