Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Liebe Pro-Coder,
ich würde gerne die Funktion "vier Trades pro Tag / Handelsstopp bei Erreichen des Gewinnziels" in meinen EA implementieren.
Wenn das maximale Handelslimit / Gewinn erreicht ist, sollte der EA bis zum nächsten Tag warten, um den Handel fortzusetzen.
Ich frage mich, ob jemand meinen Code überprüfen könnte, ich habe ein bisschen ein "Brain Freeze" hier, so dass der Code
ist eine Art Pseudo-Code-Zustand... ;-)
Vielen Dank im Voraus!
extern int MaxShortTrades = 2;
extern int MaxLongTrades = 2;
extern double profitTarget = 300; // Target in Money
// Count Trades per Day.
int y;
int totalOrders = 4;
datetime toT; // Time of Trade
datetime doT; // Day of Trade
datetime now = TimeCurrent();
datetime boD=now-now%86400; // Beginning of day
if (AccountProfit()>= profitTarget)
{
for(y=0;y<totalOrders; y++)
{
if(OrderSelect(y,SELECT_BY_POS,MODE_HISTORY))
{
toT=OrderOpenTime(); // Time of Trade
doT=toT-toT%86400; // Day of Trade.
if(doT==boD)
{ // Time of Trade within Current Day.
for(j=OrdersTotal()-1;j>=0; j--)
{
if(OrderType()==OP_BUY) totalOrders++; // Check # of long trades.
if(OrderType()==OP_SELL) totalOrders++; // Check # of short trades
}
}
}
}
}
if(totalOrders<MaxLongTrades && Indicator_LONG_signal) Order=SIGNAL_BUY;
if(totalOrders<MaxShortTrades && Indicator_SHORT_signal) Order=SIGNAL_SELL;
Um sowohl die Historie (für am aktuellen Tag geschlossene Aufträge) als auch die offenen Aufträge zu prüfen, versuchen Sie Folgendes:
int totalOrdersLong = 0, totalOrdersShort = 0;
for(int y=OrdersHistoryTotal()-1;y>=0; y--)
{
if (OrderSelect(y,SELECT_BY_POS,MODE_HISTORY))
if (OrderCloseTime()>=today)
{
if (OrderType()==OP_BUY) totalOrdersLong++;
if (OrderType()==OP_SELL) totalOrdersShort++;
}
}
for(int y=OrdersTotal()-1;y>=0; y--)
{
if (OrderSelect(y,SELECT_BY_POS,MODE_TRADES))
if (OrderOpenTime()>=today)
{
if (OrderType()==OP_BUY) totalOrdersLong++;
if (OrderType()==OP_SELL) totalOrdersShort++;
}
}
if(totalOrdersLong <MaxLongTrades && Indicator_LONG_signal) Order=SIGNAL_BUY;
if(totalOrdersShort<MaxShortTrades && Indicator_SHORT_signal) Order=SIGNAL_SELL;
Hallo Mladen,
vielen Dank für deine Hilfe, jetzt ist mir klarer geworden, wie ich das handhaben soll.
Wäre es auch möglich, ein "tägliches Gewinnziel" zu überprüfen? Sagen wir, der EA soll für 50,- EUR pro Tag gehen,
wenn das Tagesziel erreicht ist, soll er den Handel stoppen und am nächsten Tag fortfahren....
Wahrscheinlich etwas in dieser Art:
if (AccountProfit()<= profitTarget)
{
datetime today = StringToTime(TimeToString(TimeCurrent(),TIME_DATE));
int totalOrdersLong = 0, totalOrdersShort = 0;
for(int y=OrdersHistoryTotal()-1;y>=0; y--)
{
if (OrderSelect(y,SELECT_BY_POS,MODE_HISTORY))
if (OrderCloseTime()>=today)
{
if (OrderType()==OP_BUY) totalOrdersLong++;
if (OrderType()==OP_SELL) totalOrdersShort++;
}
}
for(int y=OrdersTotal()-1;y>=0; y--)
{
if (OrderSelect(y,SELECT_BY_POS,MODE_TRADES))
if (OrderOpenTime()>=today)
{
if (OrderType()==OP_BUY) totalOrdersLong++;
if (OrderType()==OP_SELL) totalOrdersShort++;
}
}
if(totalOrdersLong <MaxLongTrades && Indicator_LONG_signal) Order=SIGNAL_BUY;
if(totalOrdersShort<MaxShortTrades && Indicator_SHORT_signal) Order=SIGNAL_SELL;
}
// Check if Profit Targer for the day is reached, so close all open Opsitions
if (AccountProfit()>= profitTarget)
{
if(OrderSelect(buy_ticket,SELECT_BY_TICKET))
{
dummyResult=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage*PipMultiplier,MediumSeaGreen);
Print("Error closing Buy #",(string)OrderTicket()," Error code ",(string)GetLastError());
}
}
else
if(Order==SIGNAL_CLOSESELL && sell_ticket!=0)
{
if(OrderSelect(sell_ticket,SELECT_BY_TICKET))
{
dummyResult=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage*PipMultiplier,DarkOrange);
Print("Error closing Sell #",(string)OrderTicket()," Error code ",(string)GetLastError());
}
}
Hallo Mladen,
vielen Dank für deine Hilfe, jetzt ist mir klarer geworden, wie ich das handhaben soll.
Wäre es auch möglich, ein "Tagesgewinnziel" abzufragen? Sagen wir, der EA soll für 50,- EUR pro Tag gehen,
wenn das Tagesziel erreicht ist, soll er den Handel stoppen und am nächsten Tag fortfahren....
Wahrscheinlich etwas in dieser Art:
if (AccountProfit()<= profitTarget)
{
datetime today = StringToTime(TimeToString(TimeCurrent(),TIME_DATE));
int totalOrdersLong = 0, totalOrdersShort = 0;
for(int y=OrdersHistoryTotal()-1;y>=0; y--)
{
if (OrderSelect(y,SELECT_BY_POS,MODE_HISTORY))
if (OrderCloseTime()>=today)
{
if (OrderType()==OP_BUY) totalOrdersLong++;
if (OrderType()==OP_SELL) totalOrdersShort++;
}
}
for(int y=OrdersTotal()-1;y>=0; y--)
{
if (OrderSelect(y,SELECT_BY_POS,MODE_TRADES))
if (OrderOpenTime()>=today)
{
if (OrderType()==OP_BUY) totalOrdersLong++;
if (OrderType()==OP_SELL) totalOrdersShort++;
}
}
if(totalOrdersLong <MaxLongTrades && Indicator_LONG_signal) Order=SIGNAL_BUY;
if(totalOrdersShort<MaxShortTrades && Indicator_SHORT_signal) Order=SIGNAL_SELL;
}
// Check if Profit Targer for the day is reached, so close all open Opsitions
if (AccountProfit()>= profitTarget)
{
if(OrderSelect(buy_ticket,SELECT_BY_TICKET))
{
dummyResult=OrderClose(OrderTicket(),OrderLots(),Bid,Slippage*PipMultiplier,MediumSeaGreen);
Print("Error closing Buy #",(string)OrderTicket()," Error code ",(string)GetLastError());
}
}
else
if(Order==SIGNAL_CLOSESELL && sell_ticket!=0)
{
if(OrderSelect(sell_ticket,SELECT_BY_TICKET))
{
dummyResult=OrderClose(OrderTicket(),OrderLots(),Ask,Slippage*PipMultiplier,DarkOrange);
Print("Error closing Sell #",(string)OrderTicket()," Error code ",(string)GetLastError());
}
}
Warum fügen Sie nicht eine Gewinnsammlung (Summierung) in die Schleife ein, die die Anzahl der aktuell geöffneten Long- und Short-Orders überprüft?
Etwa so:
double profitSoFarLong=0,profitSoFarShort=0;
for(int y=OrdersTotal()-1;y>=0; y--)
{
if (OrderSelect(y,SELECT_BY_POS,MODE_TRADES))
if (OrderOpenTime()>=today)
{
if (OrderType()==OP_BUY) { totalOrdersLong++; profitSoFarLong += OrderProfit()+OrderCommission()+OrderSwap(); }
if (OrderType()==OP_SELL) { totalOrdersShort++; profitSoFarShort += OrderProfit()+OrderCommission()+OrderSwap(); }
}
}
Und dann können Sie profitSoFarLong und profitSoFarShort zur weiteren Kontrolle verwenden
PS: Wenn Sie die Gesamtsumme (für geschlossene und geöffnete Orders) haben möchten, kann ein ähnlicher Code auch zu den bereits geschlossenen Orders hinzugefügt werden.)
Hallo Mladen,
Sie haben den "AutoFiboAutoTrend"-Indikator für mich repariert und er funktioniert gut. Wäre es möglich, einen Audio-Alarm mit Benachrichtigung hinzuzufügen, wenn die Richtung des Fibos von "aufwärts" zu "abwärts" wechselt? Bitte sehen Sie die Bilder 1 + 2
Vielen Dank Lea
Warum fügst du nicht eine Gewinnsammlung (Summierung) in die Schleife ein, die die Anzahl der aktuell geöffneten Long- und Short-Orders überprüft?
Etwa so:
double profitSoFarLong=0,profitSoFarShort=0;
for(int y=OrdersTotal()-1;y>=0; y--)
{
if (OrderSelect(y,SELECT_BY_POS,MODE_TRADES))
if (OrderOpenTime()>=today)
{
if (OrderType()==OP_BUY) { totalOrdersLong++; profitSoFarLong += OrderProfit()+OrderCommission()+OrderSwap(); }
if (OrderType()==OP_SELL) { totalOrdersShort++; profitSoFarShort += OrderProfit()+OrderCommission()+OrderSwap(); }
}
}
Und dann können Sie profitSoFarLong und profitSoFarShort zur weiteren Steuerung verwenden
PS: Wenn Sie die Gesamtsumme (für geschlossene und geöffnete Aufträge) haben möchten, kann ein ähnlicher Code auch zu den bereits geschlossenen Aufträgen hinzugefügt werden.)
Hallo Mladen,
vielen Dank für deine Hilfe!
Ich habe den Code wie folgt implementiert:
datetime today = StringToTime(TimeToString(TimeCurrent(),TIME_DATE));
int totalOrdersLong = 0, totalOrdersShort = 0;
int x;
for(x=OrdersHistoryTotal()-1;x>=0; x--)
{
if (OrderSelect(x,SELECT_BY_POS,MODE_HISTORY))
if (OrderCloseTime()>=today)
{
if (OrderType()==OP_BUY) totalOrdersLong++;
if (OrderType()==OP_SELL) totalOrdersShort++;
}
}
for(x=OrdersTotal()-1;x>=0; x--)
{
if (OrderSelect(x,SELECT_BY_POS,MODE_TRADES))
if (OrderOpenTime()>=today)
{
if (OrderType()==OP_BUY) totalOrdersLong++;
if (OrderType()==OP_SELL) totalOrdersShort++;
}
}
double profitSoFarLong=0,profitSoFarShort=0;
for(x=OrdersTotal()-1;x>=0; x--)
{
if (OrderSelect(x,SELECT_BY_POS,MODE_TRADES))
if (OrderOpenTime()>=today)
{
if (OrderType()==OP_BUY) { totalOrdersLong++; profitSoFarLong += OrderProfit()+OrderCommission()+OrderSwap(); }
if (OrderType()==OP_SELL) { totalOrdersShort++; profitSoFarShort += OrderProfit()+OrderCommission()+OrderSwap(); }
}
}
// EA STOP if Profit is Reached.
if (profitSoFarLong>50 || profitSoFarLong>50)
{
if(OrderType()==OP_BUY) { dummyResult = OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_ASK),0,CLR_NONE); }
if(OrderType()==OP_SELL) { dummyResult = OrderClose(OrderTicket(),OrderLots(),MarketInfo(s_symbol,MODE_BID),0,CLR_NONE); }
Print ("Account Profit Reached. All Open Trades Have Been Closed");
return(0);
Sleep(3600); // one hour
}
Bitte helfen Sie mir mladen. SLIPPAGE funktioniert nicht im angehängten EA
Rajiv
Slippage ist an der richtigen Stelle in den OrderSend()-Aufrufen - versuchen Sie, einen größeren Wert zu verwenden und testen Sie ihn dann, da die Verwendung des Codes in Ordnung ist
Bitte helfen Sie mir... Ist es möglich, jedes "Close" in eine .csv-Datei zu schreiben, wobei alle Exportmittel
im Code dieses Indikators
void RSI_output(string SymbolName,int PeriodMinutes)
{
int size=iBars(SymbolName,PeriodMinutes); if(size==0) return;
int handle=FileOpen(SymbolName+PeriodMinutes+"_RSI.csv",FILE_WRITE|FILE_CSV); if (handle<0)return;
FileWrite(handle,"Time seconds;Time;Open;Low;High;Close;Volume;RSI");
for (int i=size-1;i>=0;i--)
{
FileWrite(handle,iTime(SymbolName,PeriodMinutes,i),TimeToStr(iTime(SymbolName,PeriodMinutes,i))
,iOpen(SymbolName,PeriodMinutes,i),iLow(SymbolName,PeriodMinutes,i),iHigh(SymbolName,PeriodMinutes,i)
,iClose(SymbolName,PeriodMinutes,i),iVolume(SymbolName,PeriodMinutes,i),iCustom(SymbolName,PeriodMinutes,"RSI",0,i));
}
FileClose(handle);
return;
}
int start() { RSI_output(_Symbol,_Period); return(0); }
Ich möchte jedes "Close" in eine .csv-Datei speichern, ohne die Datei erneut zu aktualisieren. Einfach eine Datei in einer Zeile beenden... jede Minute, zum Beispiel))))))) BITTE BITTE BITTE. Geben Sie mir ein funktionierendes Instrument für die Interaktion mit R.
Bitte helfen Sie mir... Ist es möglich, jedes "Close" in eine .csv-Datei zu schreiben, mit allen Exportmöglichkeiten
im Code dieser Indikator
void RSI_output(string SymbolName,int PeriodMinutes)
{
int size=iBars(SymbolName,PeriodMinutes); if(size==0) return;
int handle=FileOpen(SymbolName+PeriodMinutes+"_RSI.csv",FILE_WRITE|FILE_CSV); if (handle<0)return;
FileWrite(handle,"Time seconds;Time;Open;Low;High;Close;Volume;RSI");
for (int i=size-1;i>=0;i--)
{
FileWrite(handle,iTime(SymbolName,PeriodMinutes,i),TimeToStr(iTime(SymbolName,PeriodMinutes,i))
,iOpen(SymbolName,PeriodMinutes,i),iLow(SymbolName,PeriodMinutes,i),iHigh(SymbolName,PeriodMinutes,i)
,iClose(SymbolName,PeriodMinutes,i),iVolume(SymbolName,PeriodMinutes,i),iCustom(SymbolName,PeriodMinutes,"RSI",0,i));
}
FileClose(handle);
return;
}
int start() { RSI_output(_Symbol,_Period); return(0); }
Ich möchte in der .csv-Datei jedes "Schließen" ohne Hovering und die Datei wieder aktualisieren zu speichern. Einfach eine Datei in einer Zeile beenden ... jede Minute, zum Beispiel))))))) BITTE BITTE BITTE. Geben Sie mir ein funktionierendes Instrument für die Interaktion mit R.
Ja. die Geschichte von dem, was auf dem Zeitplan + 1 bar (& meine iCustom Indikatoren). fragen Sie einfach, ohne die Datei für immer neu zu schreiben.
Hier ist eine Version, die eine Option hat - soll sie die alte Datendatei neu schreiben oder soll sie immer eine neue Datei für jeden neuen Balken erstellen
#property indicator_buffers 0
extern bool RewriteOldData=true;
void RSI_output(string symbolName,int PeriodMinutes, datetime time)
{
string name = (RewriteOldData) ? symbolName+PeriodMinutes : symbolName+PeriodMinutes+(string)(time/60);
int size =iBars(symbolName,PeriodMinutes); if(size==0) return;
int handle=FileOpen(name+"_RSI.csv",FILE_WRITE|FILE_CSV); if (handle<0)return;
FileWrite(handle,"Time seconds;Time;Open;Low;High;Close;Volume;RSI");
for (int i=size-1;i>=0;i--)
FileWrite(handle,iTime(symbolName,PeriodMinutes,i),TimeToStr(iTime(symbolName,PeriodMinutes,i))
,iOpen(symbolName,PeriodMinutes,i),iLow(symbolName,PeriodMinutes,i),iHigh(symbolName,PeriodMinutes,i)
,iClose(symbolName,PeriodMinutes,i),iVolume(symbolName,PeriodMinutes,i),iCustom(symbolName,PeriodMinutes,"RSI",0,i));
FileFlush(handle);
FileClose(handle);
return;
}
int start()
{
static datetime lastTime=0;
if (lastTime!=Time[0]) RSI_output(_Symbol,_Period,Time[0]);
lastTime= Time[0];
return(0);
}
Es ist ein Indikator, und alles, was Sie tun müssen, ist, den Parameter RewriteOldData zu setzen und ihn arbeiten zu lassen