Gentilmente qualcuno mi puoi aiutare in un problema tecnico specifico che inizia a diventare seccante e non so come regolarmi?
Io uso la MT4 con questo broker inglese che funziona generalmente bene
ETX Capital | Forex, spread betting e CFD | Regolamentato dalla FCA . Uso un Expert Advisor che gira su un VPS Aruba; al raggiungimento del prezzo voluto l’EA invia a mercato l'ordine che per l'EA è un ordine limite (cioè ad es. parte un ordine buy a 100 quando il prezzo di mercato scende da un livello superiore fino a toccare 100). La piattaforma tuttavia questo non lo sa, perché si vede semplicemente arrivare un ordine buy quando il prezzo scendendo tocca 100. Il problema è che ultimamente il 50% degli ordini vengono esguiti con slippage negativo (cioè l'acquisto avviene a 101, prezzo meno favorevole rispetto a quello impostato) e quasi mai con slippage positivo (diciamo il 10% dei casi), nonostante il titolo trattato non sia particolarmente volatile (Uk Gilt) e quindi mi aspetterei una piccola percentuale di eseguiti a prezzo diverso da quello voluto ma ugualmente divisi tra prezzo migliore e peggiore.
Aggiungo che il VPS è economico e non garantisce particolare rapidità di esecuzione. So che l'esecuzione al prezzo voluto non è garantita, ma così tanti ordini con slippage negativo e così pochi con slippage positivo mi danno di truffa fatta ad arte.
Adesso la faccenda inizia a diventare pesante perchè con quelle percentuali di slippage negativo il rendimento si erode molto e il rischio rimane uguale.
La domanda è se questo dipende dal broker (ETXCapital) o dal gestore della MT4 che dovrebbe essere Metaquote, e quindi se cambiando broker succederebbe la stessa cosa.
Grazie
prima di mettere sotto lente il broker monitorerei prima con due righe simili a queste cosa accade esattamente quando invii l'ordine:
void OpenOrder()
{
double OpenPrice = 100; //tuo prezzo limite
double MyAccSpread=0.05; //tuo spread max ritenuto accettabile
double bid = MarketInfo(Symbol(),MODE_BID) ;
double ask = MarketInfo(Symbol(),MODE_ASK);
double actualSpread= ask-bid;
double StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);//distanza minima di prezzo accettata dal broker
double Slippage=0;
double StopLossBuy= TuoStop;
double TakeProfitBuy=TuoTake;
if (Ask-OpenPrice >= StopLevel && Ask<=OpenPrice && actualSpread<=MyAccSpread && OpenPrice-StopLossBuy>= StopLevel && TakeProfitBuy-OpenPrice >= StopLevel)
resB = OrderSend(Symbol(),OP_BUYLIMIT,LotSize,OpenPrice ,Slippage,StopLossBuy,TakeProfitBuy,"ordine di controllo",MAGIC,0,clrNONE);
if(!OrderSelect(resB,SELECT_BY_TICKET))
Print("Ordine BUY_LIMIT non eseguito: "+ "Ask ="+Ask + "mio prezzoRichiesto= "+ OpenPrice + "SpreadAttuale= "+ (Ask-Bid)+"Errore= "+GetLastError());
else Print("ordine preso in carico, SpreadAttuale= "+ (Ask-Bid));
}
/////////////////////////////////
int start()
{
....
checkSpreadIfNoPendingBuy()
}
///////////////////////////////////
void checkSpreadIfNoPendingBuy()
{
for (int i=0; i<OrdersTotal(); i++)
{
if (OrderMagicNumber()==MAGIC && OrderSymbol()==Symbol() && OrderTicket()==resB && OrderType()==4) break;
if ( OrderMagicNumber()==MAGIC && OrderSymbol()==Symbol() &&OrderType()==0)
{
Print("spread in fase di esecuzione dell'ordine BUY_LIMIT con ticket: "+OrderTicket() +" = "+ (Ask-Bid) +"DateTime= "+OrderOpenTime());
}
}
}