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
Questo è molto sbagliato . . .
OrderSelect(BuyTicket || SellTicket, SELECT_BY_TICKET);
(BuyTicket || SellTicket) risulterà vero o falso . . . e in questo caso vero o falso sarà considerato come un 1 o 0 . . . non il tuo numero SellTicket o Buyticket . . .
Stoploss = 40 . . . . quando usi uno stoploss in OrderSend è un prezzo . . . non un numero di pip, lo slippage è un numero di pip . . . leggi la documentazione: OrderSend
Ok, so cosa intendi, quindi ho bisogno di un comando per selezionare l'ordine mentre uso OrderSelect... o OrderSelect in questo caso è generalmente sbagliato?
Leggete la documentazione... OrderSelect è necessario per selezionare l'ordine prima di poter utilizzare le funzioni OrderLots, OrderTicket, OrderOpenPrice, etc, etc "Nota: L'ordine deve essere precedentemente selezionato dalla funzioneOrderSelect()".
Se non avete bisogno di utilizzare un'informazione relativa ad un ordine esistente, non avete bisogno di OrderSelect.
Leggete la documentazione... OrderSelect è necessario per selezionare l'ordine prima di poter utilizzare le funzioni OrderLots, OrderTicket, OrderOpenPrice, etc, etc "Nota: L'ordine deve essere precedentemente selezionato dalla funzioneOrderSelect()".
Se non hai bisogno di utilizzare un'informazione relativa a un ordine esistente, non hai bisogno di OrderSelect.
Attualmente penso che avrei bisogno di questa informazione, perché se c'è una posizione a mercato ho bisogno di chiuderla e sostituirla con un'altra. Pensavo che OrderSelect mi avrebbe aiutato in questo modo. Ma se Orderselect è solo per gli ordini aperti e non per la posizione attiva a mercato non è utile. Ho ragione?
Ma se OrderSelect non aiuta come posso chiudere le posizioni attive?
saluti
Marc
nirvanamac:
Questo sembra essere per lo più corretto, ma ora ho bisogno di sapere perché il programma esegue solo l'ordine di vendita @ 12 & 23...e non gli ordini di acquisto...?
Probabilmente lo fa . . e probabilmente genera un errore che non stai tracciando . . .
Prova . . .
Il tuo OrderClose è sbagliato . . . apri un Buy at Ask, per chiudere un Buy vendi . . . vendi al Bid, apri un Sell at Bid per chiudere un Sell you Buy . . . compri al Ask.
Il tuo OrderClose è sbagliato . . . tu apri un Buy at Ask, per chiudere un Buy vendi . . . tu Vendi at Bid, tu apri un Sell at Bid per chiudere un Sell che compri . . . tu compri at Ask.
Grazie mille per avermi aiutato... Ho modificato il codice con i tuoi suggerimenti. Si presenta in questo modo:
//+------------------------------------------------------------------+
//| Der Stundentrader.mq4 ||
//| Der Marc |
//| Es gibt gar keine Internetseite |
//+------------------------------------------------------------------+
#proprietà copyright "Der Marc"
#property link "Es gibt gar keine Internetseite"
//Variabili di prestigio
extern double Minlot=0.01;
extern int Digits2Round=2;
extern int PercentOfFreeDepo=1;
extern int Slippage=5;
extern int MagicNumber=1;
extern int TradeHour3=3;
extern int TradeHour4=4;
extern int TradeHour7=7;
extern int TradeHour10=10;
extern int TradeHour17=17;
extern int TradeHour18=18;
extern int TradeHour20=20;
extern int TradeHour12=12;
extern int TradeHour23=23;
extern int StopLoss=400;
//Globale Variablen
int BuyTicket;
int SellTicket;
double UsePoint;
int UseSlippage;
int openbuy = 0;
int opensell = 0;
//+------------------------------------------------------------------+
//| funzione di inizializzazione esperto |
//+------------------------------------------------------------------+
int init()
{
UsePoint = PipPoint(Symbol());
UseSlippage = GetSlippage(Symbol(), Slippage);
}
//+------------------------------------------------------------------+
//| funzione di avvio esperto |
//+------------------------------------------------------------------+
int start()
{
double FreeDepo=NormalizeDouble(AccountBalance()-AccountMargin(),Digits2Round);
double Risk=NormalizeDouble((FreeDepo*PercentOfFreeDepo/100),Digits2Round);
double Lot=NormalizeDouble(Risk/(StopLoss/0.0001)*0.1,Digits2Round);
//===================== Permette di determinare la dimensione del lotto e il rischio ===================================
se ( Lotto<Minlot )
{
Lot=Minlot;
}
Comment("\n", "Il rischio accettabile è ",PercentOfFreeDepo,"% = ",Risk," del denaro libero ",FreeDepo," in lotti = ",Lot);
for(int i = OrdiniTotali() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if((OrderOpenTime()+3600) < TimeCurrent())
{
if (OrderType() == OP_BUY || OP_SELL)
{
bool Closed = OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(), UseSlippage, Red);
openbuy = 0;
opensell = 0;
}
if (OrderType() == OP_SELL)
{
Closed = OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(), UseSlippage, Red);
opensell = 0;
opensbuy = 0;
}
}
}
}
//BuyOrder
if ((TradeHour3==Ora())||(TradeHour4==Ora())||(TradeHour7==Ora())||(TradeHour10==Ora())||(TradeHour17==Ora())||(TradeHour18==Ora())||(TradeHour20==Ora()) && openbuy == 0) //Segnale Acquisto
{
openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,Ask - StopLoss * Point,0, "time trader buy order ",MagicNumber,0,Blue);
if (openbuy < 0) Print("OrderSend OP_BUY failed, error: ", GetLastError() );
}
//VendereOrdine
if ((TradeHour12==Hour())||(TradeHour23==Hour())&& opensell == 0) //Segnale di vendita
{
opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Bid + StopLoss * Point,0, "time trader sell order ",MagicNumber,0,Green);
if (opensell < 0) Print("OrderSend OP_SELL failed, error: ", GetLastError() );
}
//----
return(0);
}
//+------------------------------------------------------------------+
//Pip Point Funzione
doppio PipPoint (stringa Currency)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001;
ritorno (CalcPoint);
}
//Utilizzare la funzione di slittamento
int GetSlippage(string Currency, int SlippagePips)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;
else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
ritorno (CalcSlippage);
}
Durante l'esecuzione del backtest c'è un messaggio di errore ERR_INVALID_TICKET (4108).
Non tutti gli ordini sono stati eseguiti
Potrebbe essere che l'errore appartenga al fatto che lo SL è stato attivato prima?