Wie programmiert man? - Seite 135

 

Fehler beim Kompilieren

Hallo zusammen

ich habe folgenden Fehler:

'<'-Unterschiedliche Typen im Vergleich

Ich versuche folgende Zeile zu ändern:

(NonLagMA_2D_S2&&D_S2Switch==1)

zu

(Price_NowD_S2&&D_S2Switch==1)

Wo liegt das Problem?

Leider kann ich die mql-Datei nicht hochladen. Es ist nicht mein Skript

 
:: man vergleicht etwas mit verschiedenen Typen, also müssen es Integer mit Integer, Doubles mit Doubles, Strings mit Strings sein... wie hier...

IN10TION

Badguy:
Hallo zusammen

Ich habe folgenden Fehler:

'<'-Unterschiedliche Typen im Vergleich

Ich versuche, folgende Zeile zu ändern:

(NonLagMA_2D_S2&&D_S2Switch==1)

zu

(Price_NowD_S2&&D_S2Switch==1)

Wo ist das Problem?

Leider kann ich die mql-Datei nicht hochladen. Es ist nicht mein Skript
 

Schließen mehrerer Positionen nach magischer Zahl - Hilfe

Hallo zusammen.

Ich bin neu in mt4 Programmierung und unten sind meine ersten EA. Der Zweck dieser EA ist es, alle Position unabhängig von einem Währungspaar auf der Grundlage der gleichen magischen Zahl zu schließen.

Sagen wir unter magischen # 8675310, ich habe 2 Position EURUSD & USDCFh. Es soll in der Lage sein, alle diese Paare zu schließen, wenn es bestimmte Gewinnziel erreicht.

Das Problem mit diesem EA ist,

Transaktion # 1 EURUSD öffnen (kann geschlossen werden)

Open Transaction # 2 USDCFh (kann nicht geschlossen werden)

ES WIRD NICHT IN DER LAGE SEIN, TRANSAKTION # 2 ZU SCHLIESSEN.

Irgendwelche Ideen?

Danke

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

//| Closing_Trade_By_Magic_No_v1 .mq4 |

//| Meins |

//| Forex Trading Software: Forex Trading Platform MetaTrader 4 |

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

#property copyright "Mine"

#property link "http://www.metaquotes.net"

//---- Eingabeparameter

extern int MagischeZahl1=8675310;

extern int Gewinn1=10;

extern int MagischeZahl2=8675311;

extern int Gewinn2=15;

extern int MagicNumber3=8675312;

extern int Gewinn3=15;

extern int MagicNumber4=8675313;

extern int Gewinn4=15;

extern int MagicNumber5=8675314;

extern int Gewinn5=15;

extern int MagicNumber6=0;

extern int Gewinn6=10;

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

//| Experten-Initialisierungsfunktion |

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

int init()

{

onScreenComment(98, "Tengak Initialize..");

//----

//----

return(0);

}

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

//| Experten-Deinitialisierungsfunktion |

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

int deinit()

{

//----

//----

return(0);

}

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

//| expert start function |

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

int start()

{

string myMessage="";

myMessage = myMessage + ProfitLossMonitor(1,MagicNumber1,Pr ofit1,myMessage);

myMessage = myMessage + ProfitLossMonitor(2,MagicNumber2,Pr ofit2,myMessage);

myMessage = myMessage + ProfitLossMonitor(3,MagicNumber3,Pr ofit3,myMessage);

myMessage = myMessage + ProfitLossMonitor(4,MagicNumber4,Pr ofit4,myMessage);

myMessage = myMessage + ProfitLossMonitor(5,MagicNumber5,Pr ofit5,myMessage);

myMessage = myMessage + ProfitLossMonitor(6,MagicNumber6,Pr ofit6,myMessage);

onScreenComment(98,myMessage);

//----

//----

return(0);

}

string ProfitLossMonitor(int myGroupNumber,int myMagicNumber, int myProfit,string myMessage )

{

int total = OrdersTotal();

double MyCurrentProfit=0;

string MyOrderNo="";

for (int cnt = 0 ; cnt < gesamt ; cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_ TRADES);

if (OrderMagicNumber() == myMagicNumber)

{

MyCurrentProfit += OrderProfit();

MyOrderNo= MyOrderNo + "," + OrderTicket();

}

}

if(AktuellerGewinn>=MeinGewinn)

CloseAll(MeineMagischeZahl);

myMessage="Gruppenposition #" + myGroupNumber + " " + myMagicNumber + "=" + myProfit + "(" + DoubleToStr(MyCurrentProfit,2) + " " + MyOrderNo + ")" + "\n" ;

return (myMessage);

}

void CloseAll(int myMagicNumber)

{

int total = OrdersTotal();

for (int cnt = 0 ; cnt < gesamt ; cnt++)

{

OrderSelect(cnt,SELECT_BY_POS,MODE_ TRADES);

if (BestellMagischeZahl() == meineMagischeZahl)

if(OrderType()==OP_BUY)

OrderClose(OrderTicket(),OrderLots( ),Bid,5,Violet);

if(OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots( ),Ask,5,Violett);

}

}

void onScreenComment(int meinEreignis, string meinKommentar)

{

switch (meinEreignis)

{

case 98: Kommentar(meinKommentar); break;

}

}

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

Nachricht bearbeiten/löschen

 
Das Problem mit diesem EA ist,

Open Transaction # 1 EURUSD (able to close)

Transaktion Nr. 2 USDCFh öffnen (kann nicht geschlossen werden)

DIE TRANSAKTION NR. 2 KANN NICHT GESCHLOSSEN WERDEN.

Haben Sie eine Idee?

Ich nehme an, dass Sie die Ea auf dem EURUSD-Chart laufen lassen, wenn Sie versuchen, Aufträge zu schließen, da diese Positionen in Ordnung sind. Wenn Ihr Code versucht zu schließen, die USDCHF(ein wenig dislexies?) Positionen seine mit dem falschen bid und oder ask, der Schlusskurs es verwendet, ist aus dem Währungspaar, dass die ea ist zu nicht der Preis der possitions Symbol angeschlossen. Wenn Sie versuchen, ein anderes Währungspaar aus einem Diagramm zu schließen, das nicht mit dieser Währung übereinstimmt, müssen Sie zuerst den korrekten Preis wiederherstellen, bevor Sie versuchen, es zu schließen.

keit

edit: Auch die Währung, in diesem Fall USDCHF, muss in Ihrem Marktbeobachtungsfenster angezeigt werden, wenn Sie versuchen, die korrekten Kurse zum Schließen der Orders zu erhalten. Wenn der USDCHF nicht im Marktbeobachtungsfenster angezeigt wird, können Sie keine Kurse für dieses Paar abrufen.

 

Danke cockeyedcowboy !.

"Sie müssen zuerst den korrekten Preis wiederherstellen, bevor Sie versuchen, es zu schließen".

Könnten Sie die Syntax oder Funktion, die die oben genannten Bedürfnisse tun können, teilen;

 

wie man nicht bis zum nächsten Balken handelt

Ich habe zum ersten Mal versucht zu programmieren, habe aber ein Problem.

- Wenn ich einen Handel in einem Balken schließe, kann ich nur einen neuen Handel eröffnen, wenn der neue Balken geöffnet wird.

Ich habe das Folgende versucht;

datetime time0=0;

int start()

if (time0 == Time[0]) return;

{

"Programmcode"

}

time0 = Time[0];

return(0);

Wenn ich dieses Bit herausnehme, erhalte ich mehrere Einträge in verschiedenen Balken. Wenn ich es einbaue, erhalte ich viel weniger Einträge (von 70 in einem Backtest auf 4), aber mit fehlenden Einträgen.

Weiß jemand, was ich falsch mache.

Vielen Dank im Voraus.

 

Sie können die Funktion NewBar() unten verwenden.

Wie if(NewBar(){ ........Programmierung hier

bool NewBar() {

static datetime LastTime = 0;

if (Time[0] != LastTime) {

LastTime = Time[0];

return (true);

} else

return (false);

}

Sie können auch auf offene Aufträge testen, wenn Sie nur einen Auftrag auf einmal haben wollen.

Hoffentlich hilft das.

Lux

 

Lux

Vielen Dank für Ihre Hilfe in dieser Sache.

Ich glaube, ich habe herausgefunden, was in dem Programm vor sich ging.

Ich habe vorher auf einen neuen Balken am Anfang geprüft, also hat das Programm nur den ersten Tick des neuen Balkens geprüft, um zu sehen, ob er mit meinen Signalen übereinstimmt, ohne die anderen Ticks zu prüfen. Aus diesem Grund kamen nur wenige Handelssignale durch den Backtest.

Ich habe den Code jetzt richtig platziert (d.h. dort, wo meine Orderend-Instruktion ist), und es scheint gut zu funktionieren.

Bin ich richtig in meinem Denken?

 

Bitte helfen Sie, den Code des Experten zu aktualisieren.

Es ist ein einfacher Experte. Code ist klar und einfach zu, aber ich habe ein großes Problem - Experte bekam nur EINEN Versuch zu öffnen/schließen, um.

Kann jemand helfen, das zu beheben?

Der Experte muss 5-10 Mal versuchen, den Auftrag zu öffnen/schließen.

Vielleicht n=Anzahl der Versuche, und bitte ohne "while".

Vielen Dank!

Dateien:
test.mq4  9 kb
 

Mein Code für 'adjust lots after loss', brauche Hilfe..danke

Mein Code unten für 'adjust lots after loss', aber es hat eine Fehlermeldung"incorrect start position 0 for ArraySort function" beim Testen. Jeder kann mir helfen, es zu beheben? brauchen Hilfe.

double AdjtLotsByWinRate( int magicnumber,double NormLots)

{

int i,counter;

int ProfitAndTime[][2];

double Profits[];

//----

ArrayResize(ProfitAndTime,OrdersHistoryTotal());

for (i=0;i<OrdersHistoryTotal();i++)

{

if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

{

if (OrderType()<=OP_SELL && OrderMagicNumber()==magicnumber ) // 0 OP_BUY 1 OP_SELL 2 OP_BUYLIMIT 3 OP_SELLLIMIT 4 OP_BUYSTOP 5 OP_SELLSTOP

{

ProfitAndTime[counter][0]=OrderCloseTime();

ProfitAndTime[counter][1]=OrderProfit();

counter++;

}

}

}

ArrayResize(ProfitAndTime,counter);

ArrayResize(Profits,counter);

ArraySort(ProfitAndTime);

for (i=0;i<counter;i++)

{

Profits=ProfitAndTime[1];

}

//Print(Profits);

int err=GetLastError();

int WinRate_N=0,WinRate_A=5;

double WinRate;

for (i=counter;i<counter-WinRate_A+1;i--)

{

if (Profits>0){

WinRate_N=WinRate_N+1;

}

else if (Profits<0)

{

WinRate_N=WinRate_N-1;

}

else

{

WinRate_N=WinRate_N+0;

}

}

WinRate=WinRate_N/WinRate_A;

double NewLots;

if (WinRate>=0.7)

{

NewLots=NormLots*1.5;

}

else if (WinRate>=0.5 && WinRate<0.7)

{

NewLots=NormLots*1;

}

else if (WinRate>=0.3 && WinRate<0.5)

{

NewLots=NormLots*0.5;

}

else //if (WinRate<0.3)

{

NewLots=NormLots*0.1;

}

return(NewLots);

}