Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 56
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
Lo sto ancora affinando:
se la condizione è vera
ordine aperto 1
se il prezzo si è mosso dove dovrebbe o no
ordine aperto 2
LastLot= ordine 2 (o numero maggiore)
LastPrice= order2 (o un numero maggiore)
Se il prezzo si è o non si è mosso dove dovrebbe...
LastLot= ordine 3 (o numero maggiore)
LastPrice= ordine 3 (o numero maggiore)
Il problema è che l'ultimo (o meno) ordine sarà sempre tra uno StopLoss e un TakeOut, il che significa che non si azzererà quando gli altri si chiuderanno perché l'ordine stesso sarà ancora lì. Come lo leghiamo agli altri se non conosciamo il numero di ordini?
Il meccanismo di legare l'ultimo primo o il penultimo agli altri si è rivelato inefficiente poiché il loro numero cambia insieme ai numeri.
Il risultato dovrebbe essere qualcosa come "se un qualsiasi ordine della serie data ha chiuso, chiudi tutti gli altri".
Controllo della serie - il primo ordine della direzione corrente (un altro ordine non si aprirà) - qui si dovrebbe usare un identificatore aggiuntivo o qualche altro metodo vincolante. La chiave - il primo ordine è aperto secondo le condizioni, il resto degli ordini sono ausiliari.
qualche pensiero?
Lo sto ancora affinando:
se la condizione è vera
ordine aperto 1
se il prezzo si è mosso dove dovrebbe o no
ordine aperto 2
LastLot= ordine 2 (o numero maggiore)
LastPrice= order2 (o un numero maggiore)
Se il prezzo si è o non si è mosso dove dovrebbe...
LastLot= ordine 3 (o numero maggiore)
LastPrice= ordine 3 (o numero maggiore)
Il problema è che l'ultimo (o meno) ordine sarà sempre tra uno StopLoss e un TakeOut, il che significa che non si azzererà quando gli altri si chiuderanno perché l'ordine stesso sarà ancora lì. Come lo leghiamo agli altri se non conosciamo il numero di ordini?
Il meccanismo di legare l'ultimo primo o il penultimo agli altri si è rivelato inefficiente poiché il loro numero cambia insieme ai numeri.
Il risultato dovrebbe essere qualcosa come "se un qualsiasi ordine della serie data ha chiuso, chiudi tutti gli altri".
Controllo della serie - il primo ordine della direzione corrente (un altro ordine non si aprirà) - qui si dovrebbe usare un identificatore aggiuntivo o qualche altro metodo vincolante. La chiave - il primo ordine è aperto secondo le condizioni, il resto degli ordini sono ausiliari.
Qualche pensiero?
Non è chiaro. Cerca di esprimere i tuoi pensieri in modo più chiaro.
Questo è il seguente:"Se il prezzo va nel modo giusto o no, dovremmo aprire l'ordine 2" - come dovremmo capire chedovremmo aprire l'ordine 2 in ogni caso?
E avremo sempre più "altrimenti".
E se non vogliamo avere domande come"Come collegarlo con gli altri ordini quando l'importo del prezzo è sconosciuto", dovremmo prima capire l'importo.
È confuso, incomprensibile. Cerca di rendere i tuoi pensieri più chiari.
Questo"se il prezzo si è mosso nella giusta direzione o no - per aprire l'ordine2" - come dovremmo intendere che in ogni caso"per aprire l'ordine2"?
E avremo sempre più "altrimenti".
E se non vogliamo entrare in questioni come"Come collegarlo con gli altri ordini se non conosciamo l'importo", dovremmo prima scoprire l'importo.
OK, con i numeri
EURUSD=1,10000
un comando per aprire un ordine di acquisto secondo il TP (già scritto)
se EURUSD=1.10200 diamo un ordine di acquisto (già scritto)
se EURUSD=1.09800 per "comprare" (è già scritto)
e così via con un passo di 200
se uno degli ordini è chiuso (stop e takeover sono impostati, ma non a tutti)
Chiudere l'intera griglia
cercando un modo per identificare la grigliaOK, con i numeri
EURUSD=1,10000
comando per aprire un ordine di acquisto secondo l'ordine corrente (già scritto)
se EURUSD=1,10200 deve essere riempito per comprare (già scritto)
se EURUSD=1.09800 per "comprare" (è già scritto)
e così via con un passo di 200
se uno degli ordini si chiude (stop e takeover sono già stati piazzati)
chiudere l'intera griglia
alla ricerca di un modo per identificare la grigliaSi possono aggiungere commenti con il numero d'ordine. E se l'intera serie di ordini di un tipo - allora dovrebbero semplicemente ricalcolarli e fissare la quantità.
Stavo pensando ai commenti, ma a giudicare dal feedback lo chef pensa che siano immangiabili e o li cancella o li cambia con i propri
E per quanto riguarda il conteggio, quindi devo contare e registrare il numero quando ne aggiungo un altro?
e riguardo al conteggio, devo contare e registrare la quantità quando ne aggiungo un altro?
Sì. E se il numero è diminuito dall'ultima volta - chiudete tutti quelli rimasti.
Puoi anche monitorare gli ordini chiusi nella cronologia. E chiudere la serie quando appare un nuovo ordine che soddisfa le caratteristiche specificate.
Puoi anche non impostare TP/SL nell'ordine, ma calcolare il TP/SL totale nell'Expert Advisor per l'intera serie. Usateli per chiudere la serie. I vantaggi - la società di intermediazione non vede i livelli di breakpoint, e il problema di trovare la serie rimane se un TP o un SL è scattato a un ordine.double volume(string symbol,double risk,double sl)
{
double lot=0.0;
double procent=0.0;
double balans=0.0;
double tc = SymbolInfoDouble(symbol,SYMBOL_TRADE_CONTRACT_SIZE);
double tv = SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_VALUE);
double ts=SymbolInfoDouble(symbol,SYMBOL_TRADE_TICK_SIZE);
double point=SymbolInfoDouble(symbol,SYMBOL_POINT);
if(Type_Balanse==Balance) balans=AccountInfoDouble(ACCOUNT_BALANCE);
if(Type_Balanse==Equity) balans=AccountInfoDouble(ACCOUNT_EQUITY);
if(Type_Balanse==FreeMargin) balans=AccountInfoDouble(ACCOUNT_FREEMARGIN);
procent=(balans/100.0)*risk;
switch((int)MarketInfo(symbol,MODE_PROFITCALCMODE))
{
case 0: if(sl!=0 && tv!=0) lot=procent/(sl*tv);break;
case 1: if(sl!=0 && point!=0 && tc!=0) lot=procent/(sl*point*tc);break;
case 2: if(sl!=0 && point!=0 && tv!=0 && ts!=0) lot=procent/(sl*point*(tv/ts));break;
}
return(NormalizeVolume(symbol,lot));
}
OK, lascia che ti faccia una semplice domanda. Come faccio a impostare l'EA per calcolare automaticamente il lotto a seconda della leva... diciamo leva 1:50 deposito 3000...
Prova così:
{
Comment( cLot(100) );
}
//===============================================================================================
//------------------------------------ Расчет лота по риску ------------------------------------+
//===============================================================================================
double cLot(double Percent=0) {
double Free=AccountFreeMargin(),
One_Lot=MarketInfo(_Symbol,MODE_MARGINREQUIRED),
Min_Lot=MarketInfo(_Symbol,MODE_MINLOT),
cStep=MarketInfo(_Symbol,MODE_LOTSTEP),
Lots_New=0;
if(Percent > 100) {
Percent = 100;
}
if(Percent == 0) {
Lots_New = 0;
return(0);
} else {
Lots_New = MathFloor(Free*Percent/100/One_Lot/cStep)*cStep;
}
if(Lots_New < Min_Lot) {
Lots_New = Min_Lot;
}
if(Lots_New*One_Lot > Free) {
return(0);
}
return(NormalizeDouble(Lots_New,LotDigit()));
}
//===============================================================================================
//-------------------- Кол-во знаков после точки в значении торгового лота ---------------------+
//===============================================================================================
int LotDigit(){
double lotStep = MarketInfo(_Symbol,MODE_LOTSTEP);
return((int)MathCeil(MathAbs(MathLog(lotStep)/MathLog(10))));
}