Fragen und Antworten an Programmierer zu MQL 4 - Seite 6

 
Ist der Code kompliziert, oder gibt es etwas Einfacheres?
 

1. Speichern Sie Bestellscheine in einem Array oder 2 Variablen.

2. Wählen Sie sie nacheinander mit OrderSelect aus (das Array ist hier praktischer).

3. Überprüfen Sie den Typ für den aktuellen Moment.

4. Wenn Typ OP_BUY || OP_SELL -> OrderDelete für zweites Ticket.

 

Bitte helfen Sie mir mit einem einfachen Beispiel, ich verstehe viele Dinge, aber die Auswahl der Reihenfolge ist ein bisschen schwierig!

 

Hier ist der Code, bei dem der Fehler auftritt: ????? Löscht den zweiten Anhänger nicht, wenn ein Anhänger ...... auslöst.


wenn (MA1<MA2)
{
if(n==0)
{
//==================================================================================================================//

tiket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,slb,tpb,NULL,MagicNumber,0,CLR_NONE);
if(tiket<0) Alert("Fehler # - ",GetLastError()," On instrument ", Symbol()); //Fehler schreiben//
//================================================================================================================//
t2 = OrderSend(Symbol(), OP_BUYSTOP, Lots*Overlot,OtkrBS, Slip,0,tpb, 0, MagicNumber,expiration);
//================================================================================================================//
t1 = OrderSend(Symbol(), OP_SELLSTOP, Lots*Overlot+1,OtkrSS,Slip,0,slb, 0, MagicNumber,expiration);
//================================================================================================================//

//==================================================================================================================//
}
//==================================================================================================================//
sonst
//=================================================================================================================//
wenn (MA1>MA2)
{
tiket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sls,tps,NULL,MagicNumber,0,CLR_NONE);
if(tiket<0) Alert("Fehler # - ",GetLastError()," On tool ", Symbol()); //Fehler schreiben//
//================================================================================================================//
t2 = OrderSend(Symbol(), OP_BUYSTOP, Lots*Overlot+1,OtkrSS1,Slip,0,sls, 0, MagicNumber,expiration);
//================================================================================================================//
t1 = OrderSend(Symbol(), OP_SELLSTOP, Lots*Overlot, OtkrBS1,Slip,0,tps, 0, MagicNumber,expiration);
//================================================================================================================//
}
//==================================================================================================================//
// wenn SELLSTOP ausgelöst wurde, BUYSTOP löschen
if(OrderSelect(t1, SELECT_BY_TICKET))
{
if(OrderType()==OP_SELL)
{
OrderDelete(t2);
}
}
//----
// wenn BUYSTOP ausgelöst wurde, SELLSTOP löschen
if(OrderSelect(t2, SELECT_BY_TICKET))
{
if(Auftragsart()==OP_BUY)
{
OrderDelete(t1);
}
}

 

Sie sind verwirrt über die Bedingungen. Ich glaube, Sie haben {} Klammern an der falschen Stelle:

if ( n == 0 )
{
        if (MA1<MA2) 
        {
                //==================================================================================================================//

                tiket=OrderSend(Symbol(),OP_BUY,Lots,NormalizeDouble(Ask,Digits),Slip,slb,tpb,NULL,MagicNumber,0,CLR_NONE); 
                if(tiket<0) Alert("Ошибка № - ",GetLastError()," На инструменте ", Symbol()); //пишет ошибку// 
                //================================================================================================================//
                t2 = OrderSend(Symbol(), OP_BUYSTOP, Lots*Overlot,OtkrBS, Slip,0,tpb, 0, MagicNumber,expiration);
                //================================================================================================================//
                t1 = OrderSend(Symbol(), OP_SELLSTOP, Lots*Overlot+1,OtkrSS,Slip,0,slb, 0, MagicNumber,expiration);
                //================================================================================================================//

                //==================================================================================================================//
        }
        //==================================================================================================================// 
        else 
        //=================================================================================================================// 
        if (MA1>MA2) 
        {
                tiket=OrderSend(Symbol(),OP_SELL,Lots,NormalizeDouble(Bid,Digits),Slip,sls,tps,NULL,MagicNumber,0,CLR_NONE);
                if(tiket<0) Alert("Ошибка № - ",GetLastError()," На инструменте ", Symbol()); //пишет ошибку//
                //================================================================================================================//
                t2 = OrderSend(Symbol(), OP_BUYSTOP, Lots*Overlot+1,OtkrSS1,Slip,0,sls, 0, MagicNumber,expiration);
                //================================================================================================================//
                t1 = OrderSend(Symbol(), OP_SELLSTOP, Lots*Overlot, OtkrBS1,Slip,0,tps, 0, MagicNumber,expiration);
        //================================================================================================================//
        }
}
//==================================================================================================================//
// если сработал SELLSTOP удаляем BUYSTOP
if(OrderSelect(t1, SELECT_BY_TICKET))
{
        if(OrderType()==OP_SELL)
        {
                OrderDelete(t2);
        }
}
//----
// если сработал BUYSTOP удаляем SELLSTOP
if(OrderSelect(t2, SELECT_BY_TICKET))
{
        if(OrderType()==OP_BUY)
        {
                OrderDelete(t1);
        }
}

Oder so ähnlich.

 
hat leider nicht funktioniert........
 

Erstaunlich ist, dass ich einen ähnlichen EA habe. Ich habe alles damit überprüft, es ist im Prinzip alles das gleiche, es funktioniert, und das hier nicht...

Der Unterschied besteht darin, dass der andere EA nur eine Pose für den Kaufeintrag und zwei Pendants hat.

 

Tickets in globalen Variablen? (außerhalb von Start- und anderen Funktionen)

Wenn nicht, werden sie bei jedem Tick zurückgesetzt.

Fügen Sie bei jedem Schritt des Expert Advisors mehrere Print()-s ein, dann werden Sie verstehen, wo er abstürzt und was er nicht tut.

 

HOORAY AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Gewinner: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 
hasayama:

Tickets in globalen Variablen? (außerhalb von Start- und anderen Funktionen)

Wenn nicht, werden sie bei jedem Tick zurückgesetzt.

Fügen Sie bei jedem Schritt des Expert Advisors mehrere Print()-s ein, dann werden Sie verstehen, wo er abstürzt und was er nicht tut.

Ich bin dir wahnsinnig dankbar, ich habe den Punkt übersehen, dass ich die Tickets am Anfang als double deklariert habe und die Reihenfolge nicht als 1.0 und 2.0 eingetragen werden kann. Deshalb hat die Funktion zum Löschen auf Fließkomma gewartet
Grund der Beschwerde: