Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Ciao mladen, un'altra domanda:
Come posso controllare tutti gli ordini aperti, se il loro profitto è inferiore a -20 e poi chiuderli?
Qualcosa del genere?
//int currentTicket;
for(int i0=OrdiniTotali()-1; i0>=0; i0--) {
//currentTicket = OrderSelect(i0, SELECT_BY_POS, MODE_TRADES);
if(OrderProfit() <= -20) {
OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE);
}
}arroganzmaschine
Sì, questo dovrebbe farlo.
Potresti cambiare solo la linea dove controlli il profitto in questo:
if ((OrderProfit()+OrderSwap()+OrderCommission()) <= -20)
per essere sicuro che sia un profitto "puro" quello che stai controllando
Devo impostare un Bid o Ask al OrderClose? O la linea è corretta?
Hm, c'è qualcosa di sbagliato. Il backtest non chiude gli ordini che sono in meno profitto. Alla fine del test ci sono ordini aperti con -230 di profitto.
int start()
{
for(int i0=OrdersTotal()-1; i0>=0; i0--) {
if((OrderProfit()+OrderSwap()+OrderCommission()) <= -20) {
OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE);
}
}
}
Questo non funziona.
int start()
{
for(int i0=OrdersTotal()-1; i0>=0; i0--) {
if((OrderProfit()+OrderSwap()+OrderCommission()) <= -20) {
OrderClose(OrderTicket(),OrderLots(),0,0, CLR_NONE);
}
}
}
Questo non funziona.Hai dimenticato la funzione OrderSelect() (devi sempre selezionare l'ordine prima di fare qualcosa con esso). Inoltre sarebbe una buona idea aggiungere la parte che controlla che tipo di ordine stai cercando di chiudere
Qualcosa del genere:
if (OrderSelect(u0,SELECT_BY_POS,MODE_TRADES))
if((OrderProfit()+OrderSwap()+OrderCommission()) <= -20)
{
if (OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,0,CLR_NONE);
if (OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,0,CLR_NONE);
}
qualcuno potrebbe aiutarmi a convertire l'istogramma in barre nell'indicatore TrendHistogram? Vorrei ottenere le stesse barre di quelle dell'indicatore TrendFilter allegato
TrendHistogram ha bisogno dell'indicatore EMA_Adaptive per funzionare correttamente
qualcuno potrebbe aiutarmi a convertire l'istogramma in barre nell'indicatore TrendHistogram? Vorrei ottenere le stesse barre di quelle dell'indicatore TrendFilter allegato TrendHistogram ha bisogno dell'indicatore EMA_Adaptive per funzionare correttamente
freakout
Ecco qui
Impostate il DrawAsBars a true e disegnerà nel modo che avete descritto. Se lasci quel parametro a false funzionerà come l'originale
Ciao,
Qualcuno può aiutarmi a modificare questo codice, il back-testing è buono ma l'EA non funziona sul conto demo/reale.
//+------------------------------------------------------------------+
//| Hans123Trader v1 |
//+------------------------------------------------------------------+
#include
#proprietà copyright "hans123"
#proprietà link ""
// programmato da fukinagashi
extern int BeginSession1=6;(durante il backtest ho modificato e impostato 0 per tutte le sessioni ottenendo così i risultati finali)
extern int EndSession1=10;
extern int BeginSession2=10;
extern int EndSession2=14;
extern double TrailingStop = 0;
extern double TakeProfit = 452;
extern double InitialStopLoss=40;
double Lots = 0.1;
datetime bartime = 0;
double Slippage=3;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, err, i, j, cmd;
int MagicNumber;
double ts, tp, LowestPrice, HighestPrice, Price;
bool Order[5];
stringa setup;
datetime Validity=0;
if(IsTesting() && Bars<100) return(0);
MagicNumber = 50000 + func_Symbol2Val(Symbol())*100;
setup="H123_" + Symbol();
if (bartime == Time[0]) {
return(0);
} else {
bartime = Time[0];
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// MODIFICHE SUGLI ORDINI APERTI ////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(cnt=OrdiniTotali();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_BUY && (OrderMagicNumber()==MagicNumber+1 || OrderMagicNumber()==MagicNumber+3)) {
if(TimeDay(OrderOpenTime())!=TimeDay(Time[0]) {
Stampa(".");
OrderClose(OrderTicket(), Lots, Bid, 3, Red);
if (err>1) { Print("Errore nella chiusura dell'ordine di acquisto [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
} else if (OrderStopLoss()==0) {
if (TakeProfit>0) { tp=OrderOpenPrice()+TakeProfit*Point;
} else { tp=0; }
if (InitialStopLoss>0) { ts=OrderOpenPrice()-InitialStopLoss*Point;
} else { ts=0; }
OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White);
if (err>1) { Print("Errore nella modifica dell'ordine Buy [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
} else if (TrailingStop>0) {ts = Bid-Point*TrailingStop;
se (OrderStopLoss()0) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
}
} else if(OrderType()==OP_SELL && (OrderMagicNumber()==MagicNumber+2 || OrderMagicNumber()==MagicNumber+4)) {
if(TimeDay(OrderOpenTime())!=TimeDay(Time[0]) {
Stampa(".");
OrderClose(OrderTicket(), Lots, Ask, 3, Red);
if (err>1) { Print("Errore nella chiusura dell'ordine Sell [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
} else if (OrderStopLoss()==0) {
if (TakeProfit>0) { tp=OrderOpenPrice()-TakeProfit*Point;
} else { tp=0; }
if (InitialStopLoss>0) { ts=OrderOpenPrice()+InitialStopLoss*Point;
} else { ts=0; }
OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White);
if (err>1) { Print("Errore nella modifica dell'ordine Sell [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
} else if (TrailingStop>0) {ts = Ask+Point*TrailingStop;
se (OrderStopLoss()>ts && OrderProfit()>0) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// IMPOSTAZIONE DEGLI ORDINI ////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(AccountFreeMargin()<(1000*Lots)) return(0);
Validity=StrToTime(TimeYear(Time[0]) + "." + TimeMonth(Time[0]) + "." + TimeDay(Time[0]) + " 23:59");
se (TimeHour(Time[0])==EndSession1 && TimeMinute(Time[0])==0) {
LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];
HighestPrice=High;
//// il seguente è necessario, per evitare un prezzo BUYSTOP/SELLSTOP troppo vicino a Bid/Ask,
//// nel qual caso otteniamo un 130 stop non valido.
//// Ho provato a cambiare in modo corretto OP_BUY e OP_SELL, ma i risultati non sono stati soddisfacenti
//if (HighestPrice+5*Point<Ask+Spread*Point) {
// cmd=OP_BUY;
// Prezzo=Ask;
//} else {
cmd=OP_BUYSTOP;
Prezzo=HighestPrice+5*Point;
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green);
err = GetLastError();
if (err>1) { Print("Errore nella modifica dell'ordine Sell [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
//if (LowestPrice-5*Point>Bid-Spread*Point) {
// cmd=OP_SELL;
// Prezzo=Bid;
//} else {
cmd=OP_SELLSTOP;
Prezzo=LowestPrice-5*Point;
//}
ticket=OrderSendExtended(Symbol(),OP_SELLSTOP,Lots,Price,Slippage,0,0,setup,MagicNumber+2,Validity,Green);
err = GetLastError();
if (err>1) { Print("Errore nella modifica dell'ordine Sell [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
}
if (TimeHour(Time[0])==EndSession2 && TimeMinute(Time[0])==0) {
LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];
HighestPrice=High;
//if (HighestPrice+5*Point<Ask+Spread*Point) {
// cmd=OP_BUY;
// Price=Ask;
//} else {
cmd=OP_BUYSTOP;
Prezzo=HighestPrice+5*Point;
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green);
err = GetLastError();
if (err>1) { Print("Errore nella modifica dell'ordine Sell [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
//if (LowestPrice-5*Point>Bid-Spread*Point) {
// cmd=OP_SELL;
// Prezzo=Bid;
//} else {
cmd=OP_SELLSTOP;
Prezzo=LowestPrice-5*Point;
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green);
err = GetLastError();
if (err>1) { Print("Errore nella modifica dell'ordine Sell [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// DIVERSE SUBROUTINE /////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int func_Symbol2Val(string symbol) {
if(symbol=="AUDUSD") { return(01);
} else if(symbol=="CHFJPY") { return(10);
} else if(symbol=="EURAUD") { return(10);
} else if(symbol=="EURCAD") { return(11);
} else if(symbol=="EURCHF") { return(12);
} else if(symbol=="EURGBP") { return(13);
} else if(symbol=="EURJPY") { return(14);
} else if(symbol=="EURUSDm") { return(15);
} else if(symbol=="GBPCHF") { return(20);
} else if(symbol=="GBPJPY") { return(21);
} else if(symbol=="GBPUSD") { return(22);
} else if(symbol=="USDCAD") { return(40);
} else if(symbol=="USDCHF") { return(41);
} else if(symbol=="USDJPY") { return(42);
} else if(symbol=="GOLD") { return(90);
} else { Comment("Simbolo inatteso"); return(0);
}
}
int OrderSendExtended(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, datetime expiration=0, color arrow_color=CLR_NONE) {
datetime OldCurTime;
int timeout=30;
int ticket;
OldCurTime=CurTime();
while (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) {
if(OldCurTime+timeout<=CurTime()) {
Print("Errore in OrderSendExtended(): Timeout incontrato");
return(0);
}
Sleep(1000);
}
GlobalVariableSet("InTrade", CurTime()); // imposta l'indicatore di blocco
ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);
GlobalVariableDel("InTrade"); // cancella l'indicatore di blocco
return(ticket);
}
Ciao,
Qualcuno può aiutarmi a modificare questo codice, il back-testing è buono ma l'EA non funziona su un conto demo/reale.
//+------------------------------------------------------------------+
//| Hans123Trader v1 |
//+------------------------------------------------------------------+
#include
#proprietà copyright "hans123"
#proprietà link ""
// programmato da fukinagashi
extern int BeginSession1=6;(durante il backtest ho modificato e impostato 0 per tutte le sessioni ottenendo così i risultati finali)
extern int EndSession1=10;
extern int BeginSession2=10;
extern int EndSession2=14;
extern double TrailingStop = 0;
extern double TakeProfit = 452;
extern double InitialStopLoss=40;
double Lots = 0.1;
datetime bartime = 0;
double Slippage=3;
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
int cnt, ticket, err, i, j, cmd;
int MagicNumber;
double ts, tp, LowestPrice, HighestPrice, Price;
bool Order[5];
stringa setup;
datetime Validity=0;
if(IsTesting() && Bars<100) return(0);
MagicNumber = 50000 + func_Symbol2Val(Symbol())*100;
setup="H123_" + Symbol();
if (bartime == Time[0]) {
return(0);
} else {
bartime = Time[0];
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// MODIFICHE SUGLI ORDINI APERTI ////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(cnt=OrdiniTotali();cnt>=0;cnt--)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_BUY && (OrderMagicNumber()==MagicNumber+1 || OrderMagicNumber()==MagicNumber+3)) {
if(TimeDay(OrderOpenTime())!=TimeDay(Time[0]) {
Stampa(".");
OrderClose(OrderTicket(), Lots, Bid, 3, Red);
if (err>1) { Print("Errore nella chiusura dell'ordine di acquisto [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
} else if (OrderStopLoss()==0) {
if (TakeProfit>0) { tp=OrderOpenPrice()+TakeProfit*Point;
} else { tp=0; }
if (InitialStopLoss>0) { ts=OrderOpenPrice()-InitialStopLoss*Point;
} else { ts=0; }
OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White);
if (err>1) { Print("Errore nella modifica dell'ordine Buy [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
} else if (TrailingStop>0) {ts = Bid-Point*TrailingStop;
se (OrderStopLoss()0) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
}
} else if(OrderType()==OP_SELL && (OrderMagicNumber()==MagicNumber+2 || OrderMagicNumber()==MagicNumber+4)) {
if(TimeDay(OrderOpenTime())!=TimeDay(Time[0]) {
Stampa(".");
OrderClose(OrderTicket(), Lots, Ask, 3, Red);
if (err>1) { Print("Errore nella chiusura dell'ordine Sell [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
} else if (OrderStopLoss()==0) {
if (TakeProfit>0) { tp=OrderOpenPrice()-TakeProfit*Point;
} else { tp=0; }
if (InitialStopLoss>0) { ts=OrderOpenPrice()+InitialStopLoss*Point;
} else { ts=0; }
OrderModify(OrderTicket(),OrderOpenPrice(),ts,tp,0,White);
if (err>1) { Print("Errore nella modifica dell'ordine Sell [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
} else if (TrailingStop>0) {ts = Ask+Point*TrailingStop;
se (OrderStopLoss()>ts && OrderProfit()>0) OrderModify(OrderTicket(),OrderOpenPrice(),ts,OrderTakeProfit(),0,White);
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// IMPOSTAZIONE DEGLI ORDINI ////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
if(AccountFreeMargin()<(1000*Lots)) return(0);
Validity=StrToTime(TimeYear(Time[0]) + "." + TimeMonth(Time[0]) + "." + TimeDay(Time[0]) + " 23:59");
se (TimeHour(Time[0])==EndSession1 && TimeMinute(Time[0])==0) {
LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];
HighestPrice=High;
//// il seguente è necessario, per evitare un prezzo BUYSTOP/SELLSTOP troppo vicino a Bid/Ask,
//// nel qual caso otteniamo un 130 stop non valido.
//// Ho provato a cambiare in modo corretto OP_BUY e OP_SELL, ma i risultati non sono stati soddisfacenti
//if (HighestPrice+5*Point<Ask+Spread*Point) {
// cmd=OP_BUY;
// Prezzo=Ask;
//} else {
cmd=OP_BUYSTOP;
Prezzo=HighestPrice+5*Point;
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+1,Validity,Green);
err = GetLastError();
if (err>1) { Print("Errore nella modifica dell'ordine Sell [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
//if (LowestPrice-5*Point>Bid-Spread*Point) {
// cmd=OP_SELL;
// Prezzo=Bid;
//} else {
cmd=OP_SELLSTOP;
Prezzo=LowestPrice-5*Point;
//}
ticket=OrderSendExtended(Symbol(),OP_SELLSTOP,Lots,Price,Slippage,0,0,setup,MagicNumber+2,Validity,Green);
err = GetLastError();
if (err>1) { Print("Errore nella modifica dell'ordine Sell [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
}
if (TimeHour(Time[0])==EndSession2 && TimeMinute(Time[0])==0) {
LowestPrice=Low[Lowest(NULL, PERIOD_M5, MODE_LOW, 80, 0)];
HighestPrice=High;
//if (HighestPrice+5*Point<Ask+Spread*Point) {
// cmd=OP_BUY;
// Price=Ask;
//} else {
cmd=OP_BUYSTOP;
Prezzo=HighestPrice+5*Point;
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+3,Validity,Green);
err = GetLastError();
if (err>1) { Print("Errore nella modifica dell'ordine Sell [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
//if (LowestPrice-5*Point>Bid-Spread*Point) {
// cmd=OP_SELL;
// Prezzo=Bid;
//} else {
cmd=OP_SELLSTOP;
Prezzo=LowestPrice-5*Point;
//}
ticket=OrderSendExtended(Symbol(),cmd,Lots,Price,Slippage,0,0,setup,MagicNumber+4,Validity,Green);
err = GetLastError();
if (err>1) { Print("Errore nella modifica dell'ordine Sell [" + setup + "]: (" + err + ") " + ErrorDescription(err)); }
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////// DIVERSE SUBROUTINE /////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int func_Symbol2Val(string symbol) {
if(symbol=="AUDUSD") { return(01);
} else if(symbol=="CHFJPY") { return(10);
} else if(symbol=="EURAUD") { return(10);
} else if(symbol=="EURCAD") { return(11);
} else if(symbol=="EURCHF") { return(12);
} else if(symbol=="EURGBP") { return(13);
} else if(symbol=="EURJPY") { return(14);
} else if(symbol=="EURUSDm") { return(15);
} else if(symbol=="GBPCHF") { return(20);
} else if(symbol=="GBPJPY") { return(21);
} else if(symbol=="GBPUSD") { return(22);
} else if(symbol=="USDCAD") { return(40);
} else if(symbol=="USDCHF") { return(41);
} else if(symbol=="USDJPY") { return(42);
} else if(symbol=="GOLD") { return(90);
} else { Comment("simbolo inatteso"); return(0);
}
}
int OrderSendExtended(string symbol, int cmd, double volume, double price, int slippage, double stoploss, double takeprofit, string comment, int magic, datetime expiration=0, color arrow_color=CLR_NONE) {
datetime OldCurTime;
int timeout=30;
int ticket;
OldCurTime=CurTime();
while (GlobalVariableCheck("InTrade") && !IsTradeAllowed()) {
if(OldCurTime+timeout<=CurTime()) {
Print("Errore in OrderSendExtended(): Timeout incontrato");
return(0);
}
Sleep(1000);
}
GlobalVariableSet("InTrade", CurTime()); // imposta l'indicatore di blocco
ticket = OrderSend(symbol, cmd, volume, price, slippage, stoploss, takeprofit, comment, magic, expiration, arrow_color);
GlobalVariableDel("InTrade"); // cancella l'indicatore di blocco
return(ticket);
}Prova a moltiplicare l'InitialStopLoss con 10 su un conto live. Questo EA è scritto per broker a 4 cifre
______________________
PS: dovresti anche moltiplicare il TakeProfit con 10 per essere coerente e averlo come pip, ma se lo hai testato con quei numeri, non otterrai gli stessi risultati di quando hai fatto il back test (semplicemente perché il back test ti ha permesso di usare valori per quei due che né il conto demo né il conto live ti permettono)
zigflip Ultimi due psar come "ultima coppia superiore/inferiore di psar" o "ultime 2 barre"?
scusa per il ritardo nella risposta mladen, pensavo di avere l'abbonamento alla posta elettronica ma...
Intendo l'ultima coppia di psar!
Voglio principalmente monitorare l'ultimo psar, ma quando si verifica il cambiamento superiore/inferiore avrei bisogno degli ultimi due livelli, hmm forse dovrebbe essere x barre indietro... agh ho capito cosa stai dicendo ora, sui secondi pensieri forse l'ultima serie di superiori/inferiore, che riflette l'ultimo cambiamento all'arrivo della prima nuova direzione psar!
Grazie per il tuo aiuto su questo,