Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 237
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Salve, signori programmatori.
Sono troppo pigro per cercare il tutorial. Forse sai cosa dovrebbe essere cambiato nel tuo Expert Advisor in modo che applichi il money management a 0,01 e non a 0,1
Salve, signori programmatori.
Sono troppo pigro per cercare il tutorial. Forse sai cosa dovrebbe essere cambiato nel tuo Expert Advisor in modo che applichi il money management a 0,01 e non a 0,1
Tutti sono troppo pigri
Tutti sono pigri
Una cosa è che un programmatore che conosce il linguaggio sia troppo pigro per aprire il programma. Altra cosa è quando una persona che non conosce la lingua è troppo pigra per imparare la lingua per rispondere a una domanda essenzialmente semplice. Se conoscere il linguaggio è una necessità per un programmatore, non ha senso per me immergermi in esso :) Questo è tutto. Ma naturalmente, se nessuno risponde, devo farlo io. Ma allora che senso ha il forum, se solo i programmatori comunicano qui?
Una cosa è che un programmatore che conosce il linguaggio sia troppo pigro per aprire un programma. Altra cosa è quando una persona che non conosce la lingua è troppo pigra per imparare la lingua per rispondere a una domanda essenzialmente semplice. Se conoscere il linguaggio è una necessità per un programmatore, non ha senso per me immergermi in esso :) Questo è tutto. Ma naturalmente, se nessuno risponde, devo farlo io. Ma che senso ha questo forum se solo i programmatori comunicano qui?
Se non c'è punto - non fare domande ma direttamente qui
Se non ha senso, non fare domande e vieni direttamente qui
Grazie.
Salve, signori programmatori.
Sono troppo pigro per cercare il tutorial. Forse sai cosa dovrebbe essere cambiato nel tuo Expert Advisor in modo che applichi il money management a 0,01 e non a 0,1
Ho cambiato 2 cifre, vediamo se funziona come dovrebbe.
C'è un'opzione per segnare l'intero forum come letto?
E anche il forum MQL5...
Grazie
cambiato 2 cifre, vedere se funziona come dovrebbe.
Si scopre che qualcuno non è pigro. Ho fatto un errore.
Ciao a tutti!!! Grazie a tutti per i sani consigli. Ma non sono ancora riuscito a fare alcun progresso su ciò che ho iniziato)) Il mio EA apre due ordini identici e il resto è contro il movimento, voglio cambiarlo per aprire sul movimento!!! Ho provato tutte le varianti.
SIPREGA DI CONSIGLIARE CHI PUÒ
stringa GLOB_START;
int init()
{
GLOB_START = "@" + DoubleToStr(ID,0) + "@" + "_start";
if !GlobalVariableCheck( GLOB_START )GlobalVariableSet(GLOB_START,TimeCurrent());
ritorno(0);
}
int deinit()
{
switch( UninitializeReason() )
{
caso REASON_REMOVE: delete_glob ("@" + DoubleToStr(ID,0) + "@" );
}
if ( IsTesting() )delete_glob ("@" + DoubleToStr(ID,0) + "@" );
ritorno(0);
}
void delete_glob ( stringa c )
{
int i;
for ( i = GlobalVariablesTotal()-1; i>= 0 ; i-- )if ( StringFind(GlobalVariableName(i),c) >= 0 )GlobalVariableDel(GlobalVariableName(i))
}
int start()
{
Commento(Info());
int KOL_BUY = order_total(0);
int KOL_SELL = order_total(1);
doppia l;
se ( order_total() == 0 )
{
aperto(0,Lot,0,TP);
aperto(1,Lotto,0,TP);
}
if ( KOL_BUY == 0 && KOL_SELL != 0 )
{
aperto(0,Lot,0,TP);
l = last_trade(1);
aperto(1,l,0,0);
modifica_ordini(1);
}
if ( KOL_BUY != 0 && KOL_SELL == 0 )
{
aperto(1,Lot,0,TP);
l = last_trade(0);
aperto(0,l,0,0);
modifica_ordini(0);
}
ritorno(0);
}
stringa Info()
{
int i;
doppio buff_1 = 0, buff_2 = 0, buff_3 = 0;
stringa res = "\n";
for( i = OrdersHistoryTotal() - 1; i >= 0; i-- )
{
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
if( OrderMagicNumber() == ID )
{
se ( OrderOpenTime() >= iTime(NULL,PERIOD_D1,0) )buff_1 += OrderProfit();
if ( OrderOpenTime() >= iTime(NULL,PERIOD_D1,1) && OrderOpenTime() < iTime(NULL,PERIOD_D1,0) )buff_2 += OrderProfit();
if ( OrderOpenTime() >= GlobalVariableGet(GLOB_START) )buff_3 += OrderProfit();
}
}
res = res + "Profitto nella valuta di deposito per " + TimeToStr(iTime(NULL,PERIOD_D1,0)) + ": " + DoubleToStr(buff_1,0) + "\n" + "\n";
res = res + "Profitto nella valuta di deposito per " + TimeToStr(iTime(NULL,PERIOD_D1,1)) + ": " + DoubleToStr(buff_2,0) + "\n" + "\n";
res = res + "Profitto nella valuta di deposito totale:" + DoubleToStr(buff_3,0) + "\n";
return(res);
}
void modify_orders( int type )
{
int i;
datetime time_last = 0, time_first = TimeCurrent();
double SPREAD = MarketInfo(Symbol(),MODE_SPREAD)*MarketInfo(Symbol(),MODE_POINT), op_pr_last, op_pr_first, level;
for( i = OrdiniTotali() - 1; i >= 0; i-- )
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if( OrderMagicNumber() == ID && OrderType() == tipo )
{
se ( OrderOpenTime() > time_last )
{
op_pr_last = OrderOpenPrice();
time_last = OrderOpenTime();
}
se ( OrderOpenTime() < time_first )
{
op_pr_first = OrderOpenPrice();
time_first = OrderOpenTime();
}
}
}
se ( tipo == 0 )livello = op_pr_last + MathAbs(op_pr_last-op_pr_first) * (SL/100);
se ( tipo == 1 )livello = op_pr_last - MathAbs(op_pr_last-op_pr_first) * (SL/100);
for( i = OrdiniTotali() - 1; i >= 0; i -- )
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if( OrderMagicNumber() == ID && OrderType() == tipo && NormalizeDouble(OrderTakeProfit(),Digits) != NormalizeDouble(level,Digits) )OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),level,0)
}
}
double last_trade( int t )
{
int i;
doppio res = -1;
datetime time=0;
for(i=OrdiniTotali()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderOpenTime()>time && OrderMagicNumber()==ID && OrderType() == t)
{
res = OrderLots();
time = OrderOpenTime();
}
}
se ( moltiplicatore )ritorna(res * Lot_koeff);
se ( !moltiplicatore )ritorno(res + Lot_koeff);
}
int open(int type, double l, double sl=0, double tp=0, string comm = "")
{
int isOpened = 0, try = 0;
doppio s,t;
while ( IsTradeContextBusy() ){Sleep(500);}
RefreshRates();
if ( sl != 0 && sl < MarketInfo(Symbol(),MODE_STOPLEVEL) )sl = MarketInfo(Symbol(),MODE_STOPLEVEL);
if ( tp != 0 && tp < MarketInfo(Symbol(),MODE_STOPLEVEL) )tp = MarketInfo(Symbol(),MODE_STOPLEVEL);
se ( tipo == 0 )
{
se ( tp == 0 )t = 0;
if ( tp != 0 )t = Ask + tp * Point;
se ( sl == 0 )s = 0;
se ( sl != 0 )s = Bid - sl * Point;
}
se ( tipo == 1 )
{
se ( tp == 0 )t = 0;
if ( tp != 0 )t = Bid - tp * Point;
se ( sl == 0 )s = 0;
se ( sl != 0 )s = Ask + sl * Point;
}
s = NormalizeDouble(s,Digits);
t = NormalizeDouble(t,Digits);
if(type==0)isOpened = OrderSend(Symbol(),type,check_lot(l),NormalizeDouble(Ask,Digits),10,s,t,comm,ID);
if(type==1)isOpened = OrderSend(Symbol(),type,check_lot(l),NormalizeDouble(Bid,Digits),10,s,t,comm,ID);
Dormire(500);
mentre(isOpened<0)
{
while ( IsTradeContextBusy() ){Sleep(500);}
RefreshRates();
se ( tipo == 0 )
{
se ( tp == 0 )t = 0;
if ( tp != 0 )t = Bid + tp * Point;
se ( sl == 0 )s = 0;
se ( sl != 0 )s = Bid - sl * Point;
}
se ( tipo == 1 )
{
se ( tp == 0 )t = 0;
if ( tp != 0 )t = Ask - tp * Point;
se ( sl == 0 )s = 0;
se ( sl != 0 )s = Ask + sl * Point;
}
s = NormalizeDouble(s,Digits);
t = NormalizeDouble(t,Digits);
prova++;
if(type==0)isOpened = OrderSend(Symbol(),type,check_lot(l),NormalizeDouble(Ask,Digits),10,s,t,comm,ID);
if(type==1)isOpened = OrderSend(Symbol(),type,check_lot(l),NormalizeDouble(Bid,Digits),10,s,t,comm,ID);
if(try > 5) break;
if(isOpened>=0)break;
Dormire(500);
}
if(isOpened<0) Alert("Ordine non aperto, errore :", GetLastError());
return(isOpened);
}
int order_total( int type_1 = -1, int type_2 = -1 )
{
int i;
int kol=0;
for(i=OrdiniTotali()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderMagicNumber()==ID && (OrderType() == type_1 || OrderType() == type_2) )kol++;
if(OrderMagicNumber()==ID && type_1 == -1 && type_2 == -1 )kol++;
}
ritorno(kol);
}
doppio check_lot(doppio &lo)
{
double l = MarketInfo(Symbol(),MODE_LOTSTEP);
int ok = 0;
while ( l < 1 ){l*=10;ok++;}
if( lo < MarketInfo(Symbol(),MODE_MINLOT) )lo = MarketInfo(Symbol(),MODE_MINLOT);
if( lo > MarketInfo(Symbol(),MODE_MAXLOT) )lo = MarketInfo(Symbol(),MODE_MAXLOT);
return(NormalizeDouble(lo,ok));
Potete suggerirmi la seguente cosa, ci sono N EAs sul conto, che in certe condizioni possono tutti aprire un ordine allo stesso tempo, ognuno di loro controlla non più di 1 ordine sul conto, ma a volte mi ritrovo con N ordini, cosa posso fare?