Wie programmiert man? - Seite 163

 

iCCI Frage

Ich bin neu bei MQL4 und versuche, den vorherigen CCI-Wert zu ermitteln. Ich habe versucht, die iCCI-Funktion mit einem Shift-Wert von 1 zu verwenden, aber sie liefert mir nicht den vorherigen Wert. Wie könnte ich das tun, ohne den aktuellen Wert in einer Variablen zu speichern? Ich versuche, die Richtung zu bestimmen, in die sich der CCI bewegt.

Ich danke Ihnen für Ihre Hilfe.

 

Der Code ist tickbasiert, d.h. wenn es zu diesem Zeitpunkt keinen Tick gibt, dann verpasst der Code die Zeitprüfung. Ich glaube nicht, dass man es auf die Sekunde genau hinbekommen kann, ohne eine Art Schleife, die ständig läuft.

 

Hilfe bei der EA-Bearbeitung

Ich versuche, dies herauszufinden... können Sie bitte helfen?

MB Trading - Aktien Optionen Futures Forex Online Discount Trading

Ich habe dies geändert:

OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,sl,tp, "MyMEFx EA "+MagicNumber,MagicNumber,0,Arrow sColor);

return(0);

To:

int ticket = OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,0,0, "MyMEFx EA "+MagicNumber,MagicNumber,0,Arrow sColor);

Sleep(1500);

OrderModify(ticket,OrderOpenPrice() ,sl,tp,0,ArrowsColor);

=================================== ======

Ich erhalte diese Fehler:

2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: ungültiges Ticket für OrderModify-Funktion

2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderSend Fehler 131

2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderModify Fehler 4051

=====================

 
coach3131:
Ich versuche, das herauszufinden... können Sie mir bitte helfen?

MB Trading - Aktien Optionen Futures Forex Online Discount Trading

Ich habe dies geändert:

OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,sl,tp, "MyMEFx EA "+MagicNumber,MagicNumber,0,Arrow sColor);

return(0);

To:

int ticket = OrderSend(Symbol(),OP_SELL,mylotsi, SellPrice,slippage,0,0, "MyMEFx EA "+MagicNumber,MagicNumber,0,Arrow sColor);

Sleep(1500);

OrderModify(ticket,OrderOpenPrice() ,sl,tp,0,ArrowsColor);

=================================== ======

Ich erhalte diese Fehler:

2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: ungültiges Ticket für OrderModify-Funktion

2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderSend Fehler 131

2009.02.28 17:32:59 2009.01.01 20:42 EATest AUDJPY,H1: OrderModify Fehler 4051

=====================

Ihr Problem liegt in der Losgröße (Volumen) in Ihrem OrderSend-Statement, das aufgrund des Fehlers eine -1 zurückgibt. Die Ticket-Variable enthält keine Ticketnummer, sondern das Fehlerflag -1, das die anderen Fehler mit der OrderModify-Funktion ausgelöst hat. Sie müssen die Variable für die Losgröße mylotsi so korrigieren, dass sie einen akzeptablen Wert enthält. Außerdem sollten Sie den Rückgabewert in der Ticket-Variablen überprüfen, um sicherzustellen, dass sie kein Fehlerflag enthält, bevor Sie die ordermodify-Routine aufrufen.

keit

 

EA Max Position

Kann jemand maximale Positionen für diesen EA hinzufügen

oder kann er nur eine Position ausführen?

Danke im Voraus

 

Verwenden Sie besser

MathAbs(NormalizeDouble(Bid,4)-NormalizeDouble(pivot,4))<Delta*Point,

wobei Delta=2...5

 
jdun:
Könnte mir jemand den Code für Stop Loss und TP nennen. Ich brauche, um es zu diesem EA hinzufügen.

dieser versteckte SL und TP

int TakeProfit=20; // 20 pips take profit

int StopLoss =40; // 40 pips stoploss

int Slippage = 3;

int MagicNumber=1;

int i;

int start(){

//----- exit @ TP

if((ScanTrades()>=1)&& (ProfitInPips()>=TakeProfit)){

//----- This part will close all open orders and delete pending trades

for(i = OrdersTotal()-1; i >=0; i--)

{ OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MagicNumber )

{

if (OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Plum);

if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Plum);

if (OrderType() == OP_SELLLIMIT) OrderDelete(OrderTicket());

if (OrderType() == OP_BUYLIMIT) OrderDelete(OrderTicket());

if (OrderType() == OP_BUYSTOP) OrderDelete(OrderTicket());

if (OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket());

}

}

}

//------exit @ SL

if((ScanTrades()>=1)&& (ProfitInPips()<= -StopLoss)){

//----- This part will close all open orders and delete pending trades

for(i = OrdersTotal()-1; i >=0; i--)

{ OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MagicNumber )

{

if (OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Ask,Slippage,Plum);

if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Bid,Slippage,Plum);

if (OrderType() == OP_SELLLIMIT) OrderDelete(OrderTicket());

if (OrderType() == OP_BUYLIMIT) OrderDelete(OrderTicket());

if (OrderType() == OP_BUYSTOP) OrderDelete(OrderTicket());

if (OrderType() == OP_SELLSTOP) OrderDelete(OrderTicket());

}

}

}

return (0);

}

//----------- Call functions

int ScanTrades()

{

int Tot = OrdersTotal();

int Numb = 0;

for(int cnt=0; cnt<=Tot-1; cnt++)

{

OrderSelect(cnt, SELECT_BY_POS);

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) Numb++;

}

return(Numb);

}

double ProfitInPips()

{

RefreshRates();

double Prof=0;

int i;

int totalOrders=OrdersTotal();

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderMagicNumber()==MagicNumber)

{

if(OrderType()==0)

{

Prof+=(MarketInfo(OrderSymbol(),MODE_BID)-OrderOpenPrice())/MarketInfo(OrderSymbol(),MODE_POINT);

}

if(OrderType()==1)

{

Prof+=(OrderOpenPrice()-MarketInfo(OrderSymbol(),MODE_ASK))/MarketInfo(OrderSymbol(),MODE_POINT);

}

}

}

return(Prof);

}

 

Sagen wir, ich habe einige Kauf- und Verkaufsaufträge.

Was ich tun möchte ist:

- Alle Trades "Basket" bei 5 Pips mehr als dem Break-Even-Preis der offenen Trades beenden

Was ich in der ersten for-Schleife zu tun versuche, ist, den Wert der offenen Geschäfte + Swap zu finden und ihn in Pips umzuwandeln.

Ich habe einige Ideen ausprobiert, aber ich bin in einer Sackgasse gelandet. Ich weiß, dass das Problem in der ersten for-Anweisung liegt, aber ich kann es nicht lösen, jede Hilfe ist sehr willkommen

SymbolPL = 0;

OrdLots = 0;

Equity = 0;

MinPro = 5;

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

{OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)

{if(OrderType() == OP_BUY) OrdLots += OrderLots();

if(OrderType() == OP_SELL) OrdLots -= OrderLots();

Equity += OrderProfit() + OrderSwap();

}

}

MinPro= MathRound (MathAbs(Equity /OrdLots)+MinPro);

//--- Count the open trades

int i;

int count=0;

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

{ if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderMagicNumber()==MagicNumber && OrderType()<2)

{ count++;

}

}

//--- find the profit in pips of the open trades

RefreshRates();

double profits=0,openPrice=0,points=0;

string sym="";

int i;

int totalOrders=OrdersTotal();

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

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderMagicNumber()==MagicNumber)

{

sym=OrderSymbol();

openPrice=OrderOpenPrice();

if(OrderType()==0)

{

profits+=(MarketInfo(sym,MODE_BID)-openPrice)/MarketInfo(sym,MODE_POINT);

}

if(OrderType()==1)

{

profits+=(OrderOpenPrice()-MarketInfo(sym,MODE_ASK))/MarketInfo(sym,MODE_POINT);

}

}

}

//--- Close when the open trades are 5 pips more than the breakeven price

if (count>1 && profits>MinPro )

{

for(i = OrdersTotal()-1; i >=0; i--)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol() == Symbol()&& OrderMagicNumber()==MagicNumber )

{

OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,Plum);

}

}

}

 

Ich denke, Sie können eine Konstante "equity_per_lotpoint" verwenden, die wie folgt berechnet wird:

double equity_per_lotpoint = MarketInfo( Symbol(), MODE_TICKVALUE ) / MarketInfo( Symbol(), MODE_TICKSIZE );

[/PHP]

and then you'd have what you need after the first loop, with:

[PHP]if ( Equity > 5 * equity_per_lotpoint * MathAbs( OrdLots ) ) { ...

 

Danke Ralph, aber dann würde der Swap fehlen, und ich möchte den Gewinn/Verlust des Swaps in die Entscheidung über den Abschluss der Aufträge einbeziehen.