Come codificare? - pagina 250

 
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 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

increase:
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
 
mladen:
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

Mladen

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 è 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

increase:
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?
 
mladen:
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)

if(OrderType()==OP_BUY&&OrderSymbol()==Symbol()&&( (OrderMagicNumber()==Magic)||Magic==0))

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

increase:
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 sopra
 

Trade 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.