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, grazie per il tuo aiuto, ho applicato le tue modifiche ma non funziona proprio, forse sarebbe più semplice se l'EA ignorasse qualsiasi trade aperto esistente, cioè lo lasciasse aperto, e poi aprisse e chiudesse il suo nuovo singolo trade
Al momento apre e chiude il proprio trade, ma chiude anche qualsiasi altro trade aperto esistente
aumentare
Da un codice parziale questo è ciò che potrei suggerire. Se viene creato un parametro booleano NoClosesis, e se questo parametro è impostato a true, non dovrebbe chiudere gli ordini se applicato come lo snippet (se CBe CS non sono uguali a 1 quel codice non chiuderà gli ordini)
saluti
Mladen
Ciao Mladen, grazie per il tuo aiuto, ho applicato le tue modifiche ma non funziona proprio, forse sarebbe più semplice se l'EA ignorasse qualsiasi trade aperto esistente, cioè lo lasciasse aperto, e poi aprisse e chiudesse il suo nuovo trade singolo Al momento apre e chiude il suo trade, ma chiude anche qualsiasi altro trade aperto esistente
aumentare
Da un codice parziale questo è ciò che potrei suggerire. Se viene creato un parametro booleano NoClosesis, e se questo parametro è impostato a true, non dovrebbe chiudere gli ordini se applicato come lo snippet (se CBe CS non sono uguali a 1 il codice non chiuderà gli ordini)
saluti
MladenQuesto è vero, ma a meno che non abbia capito male, questo significa che anche il trade aperto dall'EA non si chiuderà mai, quindi passa solo da comprare a vendere?
Sì, è corretto.
Per quanto ho capito questa è la tua idea: lasciare che l'EA apra gli ordini e poi tu gestisci gli ordini (chiudendoli) manualmente. Con quel parametro puoi anche rimetterlo a false e allora l'EA riprenderà a chiudere gli ordini - quindi è "controllabile dall'esterno", per così dire
Questo è vero, ma a meno che non abbia capito male, questo significa che anche il trade aperto dall'EA non si chiuderà mai, quindi passa solo da comprare a vendere?
Sì, è corretto Per quanto ho capito questa era la tua idea: lasciare che l'EA apra gli ordini e poi tu gestisci gli ordini (chiudendoli) manualmente. Con quel parametro puoi anche rimetterlo a false e allora l'EA riprenderà a chiudere gli ordini - quindi è "controllabile dall'esterno", per così dire
Ah scusate sono stato ambiguo, voglio che l'EA apra e chiuda il suo ordine e ignori qualsiasi ordine esistente, quindi per esempio
1. Ho 5 ordini di vendita aperti
2. Applico l'EA che apre 1 ordine di acquisto
3. Ora ho 5 ordini di vendita e 1 di acquisto
4. L'EA ora innesca una vendita, quindi chiude il suo acquisto
5. Ora ho 6 ordini di vendita (5 esistenti, 1 vendita EA)
6. L'EA ora innesca una vendita, quindi chiude la sua vendita
7. Ora ho 5 vendite e 1 acquisto ecc.
Chiuderò le vendite esistenti, l'EA ignora qualsiasi altra operazione oltre alla propria come sopra
aumentare
Lo fa già se si imposta il parametro Magic a un valore diverso da 0 (questa è una parte di codice che controlla se deve chiudere un ordine di acquisto appena prima dell'ordine di chiusura)
Quindi se il"Magic" non è uguale a 0 e a condizione che il valore di Magic sia unico, chiuderà solo gli ordini aperti da lui stesso
Ah scusa sono stato ambiguo, voglio che l'EA apra e chiuda il suo ordine e ignori qualsiasi ordine esistente, quindi per esempio
1. Ho 5 ordini di vendita aperti
2. Applico l'EA che apre 1 ordine di acquisto
3. Ora ho 5 ordini di vendita e 1 di acquisto
4. L'EA ora innesca una vendita, quindi chiude il suo acquisto
5. Ora ho 6 ordini di vendita (5 esistenti, 1 vendita EA)
6. L'EA ora innesca una vendita, quindi chiude la sua vendita
7. Ora ho 5 vendite e 1 acquisto ecc.
Chiuderò le vendite esistenti, l'EA ignora qualsiasi altro trade a parte il suo come sopraTrade OncePerBar per un TimeFrame specifico
Ciao, cari fEllA's!
Ho un EA (yeeaa, chi non ce l'ha) che funziona bene sul tester, prende più trade per barra 4H, come da istruzioni. Ora, quando provo su Demo (Alpari UK) con 11 coppie, l'EA prende solo 1 trade, mentre dovrebbe prenderne di più (3 al massimo, come da istruzioni). Solo ogni barra 4H, se le condizioni sono soddisfatte.
Ho la funzione 'Semaphor' con GlobalVariable codificata, e questo pezzo di codice, per prevenire l'apertura di ordini multipli entro 1 TimeFrame predefinito (4H in questo caso):
//Acquista
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))
{
se (SignalsOnly)
{
// ------ L'allarme dovrebbe essere solo una volta per segnale O una volta ogni 15 o 30 minuti
if (CheckAlertTime == iTime (NULL, 5, 0)) return(0);
else CheckAlertTime = iTime (NULL, 5, 0);
if (Alerts) Alert (Symbol() + " " + DoubleToStr (Ask, Digits) + " BUY Signal");
if (PlaySounds) PlaySound (WhichSound);
}
if (!IsTrade && !SignalsOnly)
{
if (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) return (0);
altrimenti CheckAlertTime = iTime (NULL, OncePerBarTF, 0);
//Controlla il margine libero
se (AccountFreeMargin() < (1000 * Lotti))
{
Print ("Non abbiamo soldi. Margine libero = ", AccountFreeMargin());
return(0);
}
if (UseTakeProfit && CloseLotsPercent == 100) TakeProfitLevel = Ask + TakeProfit * Point; altrimenti TakeProfitLevel = 0.0;
{
if (MoneyManagement) Lots = NormalizeDouble ((AccountFreeMargin() * Risk / 100 / ((Ask - BuySL) / Point / TickValue)), 2);
altrimenti Lotti = Lotti;
}
if (TradeIsBusy() && IsTradingAllowed() < 0)
ritorna (-1);
RefreshRates();
Ticket = OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "7Qi BUY " + MagicNo, MagicNo, 0, DodgerBlue);
se (Biglietto > 0)
{
se (OrderSelect (Ticket, SELECT_BY_TICKET, MODE_TRADES))
{
Print ("7Qi BUY aperto: ", OrderOpenPrice());
if (Alerts) Alert (Symbol() + " " + DoubleToStr (Ask, Digits) + " BUY opened");
if (PlaySounds) PlaySound (WhichSound);
}
else
{
Print ("Errore nell'aprire BUY: ", Err);
}
}
// TradedThisBar = Bars;
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
TradeIsNotBusy();
return (0);
}
}
//-------------------------------------------------
È possibile che questo codice:
if (CheckAlertTime == iTime (NULL, OncePerBarTF, 0)) return (0);
else CheckAlertTime = iTime (NULL, OncePerBarTF, 0);
impedisce all'EA di fare trading a metà dell'ora? Controlla solo all'inizio della barra?
Se uso la funzione "TradedThisBar = Bars" dovrei lasciare l'EA solo su 1 TimeFrame, giusto?
La funzione "Semaphor" è codificata anche in TrailingStops, PartialCloseLots anche.
Grazie a tutti per il vostro aiuto,
Buon divertimento,
Simon
Slovenia
Iiiiiik - Ho trovato il problema
Ciao!
Ho trovato il problema - molto probabilmente è una combinazione di:
if (TradeIsBusy() /*&& IsTradingAllowed()*/ < 0)
ritorno (-1);
//-----------------------------------------------------------------------------------------
int IsTradingAllowed (int MaxWaitingSec = 30)
{
if (!IsTradeAllowed())
{
int StartWaitingTime = GetTickCount();
Stampa ("Il contesto di trading è occupato! Aspetta che si liberi...");
if (Alerts) Alert (Symbol() + " EA trading not allowed! In attesa...");
while (true)
{
se (IsStopped())
{
Stampa ("EA è stato terminato!");
return(-1);
}
if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000 )
{
Print("Limite di attesa superato (" + MaxWaitingSec + " sec)!" );
return(-2);
}
if (IsTradeAllowed())
{
Print ("Il contesto di scambio è ora libero!)
return(0);
}
Sleep (100);
}
}
else
{
Print ("Il contesto commerciale è libero!)
return(1);
}
}
*/
//-----------------------------------------------
int TradeIsBusy (int MaxWaitingSec = 30)
{
if (IsTesting()) return(1);
int Err = 0, StartWaitingTime = GetTickCount();
while (true)
{
se (IsStopped())
{
Stampa ("EA è stato terminato!");
return(-1);
}
if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)
{
Stampa ("Tempo di attesa (" + MaxWaitingSec + " sec) superato!");
if (Avvisi) Alert (Symbol() + " EA tempo di attesa superato!");
return(-2);
}
se (GlobalVariableCheck ("TradeIsBusy"))
break;
else
{
Err = GetLastError();
se (Err != 0)
{
Print ("TradeIsBusy - GlobalVariableCheck - Error # ", Err);
Dormire (100);
continuare;
}
}
if (GlobalVariableSet ("TradeIsBusy", 1.0) > 0) return(1);
else
{
Err = GetLastError();
if (Err != 0)
{
Print ("TradeIsBusy - GlobalVariableSet - Error # ", Err);
Sleep(100);
continuare;
}
}
}
while (true)
{
if (IsStopped())
{
Stampa ("EA è stato terminato!");
return(-1);
}
if (GetTickCount() - StartWaitingTime > MaxWaitingSec * 1000)
{
Stampa ("Tempo di attesa (" + MaxWaitingSec + " sec) superato!");
se (Avvisi) Allerta (Simbolo() + " tempo di attesa superato!)
return (-2);
}
if (GlobalVariableSetOnCondition ("TradeIsBusy", 1.0, 0.0 )) return (1);
else
{
Err = GetLastError();
se (Err != 0)
{
Print ("TradeIsBusy - GlobalVariableSetOnCondition - Error # ", Err);
continuare;
}
}
if (Alerts) Alert (Symbol() + " - waiting another EA to finish trading...");
Sleep (1000);
}
}
//--------------------------------
void TradeIsNotBusy()
{
int Err;
if (IsTesting())
{
return(0);
}
while (true)
{
se (IsStopped())
{
Stampa (Symbol() + " EA è stato terminato!" );
return(-1);
}
se (GlobalVariableSet ("TradeIsBusy", 0.0) > 0) return(1);
else
{
Err = GetLastError();
se (Err != 0)
Stampa ("TradeIsNotBusy - GlobalVariableSet - Errore # ", Err);
}
Sleep (100);
}
}
//-----------------------------------------------------------------------------------------------
Proverò senza la funzione IsTradeAllowed.
Grazie comunque,
Buon divertimento,
Simon
codice di errore 130
----- cancellato ----- non è più necessario......
Tutorial scaricabile su mq4
Ciao ragazzi,
non riesco a trovare un tutorial o un libro di riferimento (non online!!) sul codice mq4.
potete aiutarmi ?
Cordiali saluti
RISOLTO, ho dovuto decomprimere il file con una utility.