[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 347
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
Per favore aiutatemi a migliorare questo codice per ottenere un semplice Expert Advisor. L'essenza è semplice: apriamo 2 posizioni Sell e Bui con stop specificati al prezzo corrente. Poi, quando uno o entrambi scattano, apriamo nuove posizioni. L'essenza sembra semplice ma ancora non funziona Grazie mille!
//+------------------------------------------------------------------+
//| 2DiffOrders.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
extern double lots=0.01;
extern int SL_in_pips;
extern int TP_in_pips;
int x2;
int init()
{
if(SL_in_pips<=MarketInfo(Symbol(),MODE_STOPLEVEL) && SL_in_pips>0)
{
SL_in_pips=MarketInfo(Symbol(),MODE_STOPLEVEL);
Alert("Stoploss установлен слишком близко к цене открытия. Должен быть минимум ",MarketInfo(Symbol(),MODE_STOPLEVEL),"pt.");
}
if(TP_in_pips<=MarketInfo(Symbol(),MODE_STOPLEVEL) && TP_in_pips>0)
{
TP_in_pips=MarketInfo(Symbol(),MODE_STOPLEVEL);
Alert("Takeprofit установлен слишком близко к цене открытия. Должен быть минимум ",MarketInfo(Symbol(),MODE_STOPLEVEL),"pt.");
}
x2=1;
while(x2!=0)
{
if(OrderSend(Symbol(),0,lots,Ask,2,Bid-15*Point,Bid+15*Point,0)!=-1)
{
Alert("Ордер типа BUY успешно открыт");
OrderSend(Symbol(),1,lots,Bid,2,Ask+15*Point,Ask-15*Point,0);
x2=GetLastError();
if(x2==0)
Alert("Ордер типа SELL успешно открыт");
if(x2!=0)
Alert("Ордер типа SELL не открыт. Ошибка №: ",x2);
}else
{
x2=GetLastError();
if(x2!=0)
Alert("Ордер типа BUY не открыт. Ошибка №: ",x2);
}
}
//----
return(0);
Questo solo sembra essere esattamente giusto, ma nella vista della macchina l'ultimo bit può assumere valori diversi. Cioè 2,9999, 3 o 3,00000001
Per sbarazzarsi di questi malintesi c'è la funzione NormalizeDouble() in MQL.
Sì, NormalizeDouble() aiuta, grazie.
Ma non è ancora chiaro come questo sia possibile, sembra essere una semplice divisione, e se si divide 0,5 o 0,9 o anche 0,31 per 0,1, tutto va bene.
e qui ha chiaramente 2,9, non è chiaro... la calcolatrice è più precisa :-)
Grazie a Reshetov e splxgf per il loro aiuto.
Ma non è ancora chiaro come sia possibile, sembra essere una semplice divisione. E se si divide 0,5 o 0,9 o anche 0,31 per 0,1, va bene.
e qui è 2,9, non è chiaro... la calcolatrice è più precisa :-)
Le calcolatrici hanno funzioni di arrotondamento integrate. E risolvono allo stesso modo perché usano lo stesso coprocessore matematico per calcolare i numeri in virgola mobile.
Ciao!
Per favore, potete darmi un indizio!!!
Non capisco come farlo da solo.
Compito:
EA mette 1-2 ordini una volta al giorno.
Il valore iniziale della variabile è impostato manualmente e può assumere un valore da 1 a 10.
Dovete cambiare la variabile precedentemente impostata con incrementi di 1 ad un valore di - 10
in ogni giorno lavorativo dell'EA, solo di 1, se in quel giorno il TP non viene eseguito.
Quando TP viene eseguito, la variabile restituisce il valore - 1.
Contare SL non è adatto, perché può essere uno o due, e il valore può essere cambiato solo una volta al giorno.
Cioè
Variabile = 1
Giorno 1 SL - variabile =2
Giorno 2 SL - variabile =3
Giorno 3 SL - variabile =4
Giorno 4 TP - variabile =1
Giorno 5 SL - variabile =2
... E così via.
Aiuto!
Grazie.
Per favore aiutatemi a migliorare questo codice per ottenere un semplice Expert Advisor. L'essenza è semplice: apriamo 2 posizioni Sell e Bui con stop specificati al prezzo corrente. Poi, quando uno o entrambi scattano, apriamo nuove posizioni. L'essenza sembra semplice ma ancora non funziona Grazie mille!
Conoscitori, per favore aiutatemi.
C'è un codice che calcola il momentum di un singolo periodo e lo integra con un grande periodo, poi lo emette come indicatore.
Ho bisogno di scrivere un indicatore con un dato periodo che trovi la media della curva risultante e la emetta come indicatore.
Il codice è allegato:
#proprietà indicator_separate_window
#proprietà indicator_buffers 1
#property indicator_color1 DodgerBlue
#proprietà indicator_width1 2
//------- Parametri dell'indicatore esterno ----------------------------------------+
extern int MTM_Period = 1;
//extern int MTM_Integr_Period = 1000;
//extern int Applied_Price = 0; // Prezzo usato:
// 0 - PREZZO_CHIUSO
// 1 - PREZZO_APERTO
// 2 - PREZZO_ALTO
// 3 - PREZZO_BASSO
// 4 - PREZZO_MEDIO
// 5 - PREZZO_TIPICO
// 6 - PREZZO_PONDERATO
extern NumberOfBars = 1000; // Numero di barre (0-tutti)
//------- Buffer indicatori ---------------------------------------------------+
doppio buf0[];
//+----------------------------------------------------------------------------+
//| funzione di inizializzazione dell'indicatore personalizzato
//+----------------------------------------------------------------------------+
void init() {
SetIndexBuffer (0, buf0);
SetIndexEmptyValue(0, 0);
SetIndexLabel (0, "i-mtm_integr");
SetIndexStyle (0, DRAW_LINE);
}
//+----------------------------------------------------------------------------+
//| funzione di deinizializzazione dell'indicatore personalizzata
//+----------------------------------------------------------------------------+
void deinit() {
Commento(");
}
//+----------------------------------------------------------------------------+
//| funzione di iterazione dell'indicatore personalizzata
//+----------------------------------------------------------------------------+
void start() {
int LoopBegin, i,j, per=3;
doppio mtm, mtmsum;
if (NumberOfBars==0) LoopBegin=Bars-1;
else LoopBegin=NumberOfBars;
LoopBegin=MathMin(LoopBegin, Bars-1);
per (i=LoopBegin; i>=0; i--) {
mtm=Close[i]-Close[MTM_Period+i];
mtmsum=mtmsum+mtm;
buf0[i]=mtmsum;
}
/* for (i=LoopBegin-per;i>=per;i--){
mtm=Close[i]-Close[MTM_Period+i];
mtmsum[i]=0+mtm;
per (j=per;j<=0;j--){
mtmsum[i]=0+mtmsum[i+j];
mtmsum[i]=mtmsum[i]/per;
buf0[i]=mtmsum[i];
}
}*/
}
//+----------------------------------------------------------------------------+
Conoscitori, per favore aiutatemi.
C'è un codice che calcola il momentum di un singolo periodo e lo integra con un grande periodo, poi lo emette come indicatore.
Ho bisogno di scrivere un indicatore con un dato periodo che trovi la media della curva risultante e la emetta come indicatore.
Questo solo sembra essere esattamente giusto, ma nella vista della macchina l'ultimo bit può assumere valori diversi. Cioè 2,9999, 3 o 3,00000001
Per sbarazzarsi di questi malintesi, MQL ha la funzione NormalizeDouble()
Perché la funzione NormalizeDouble() non viene eseguita di default per tutti i valori di Ask, Bid, Low, ecc.
Tutti ci sono cascati e poi devono ripararlo "manualmente"... Strano che MT non possa leggere ciò che ha generato.
Grazie, c'è qualche garanzia che i dati saranno disponibili in start()?
si può provare a usare RefreshRates() - vedere gli esempi nella guida standard di MetaEditor
C'è un'opzione "Salva come rapporto" nell'ottimizzazione EA, ma i "Parametri di ingresso" non sono mostrati in Internet Explorer,
anche se, a giudicare dal codice html, sono presenti lì. In generale, è per questi parametri che è stata avviata l'ottimizzazione.
Forse qualcuno sa come vederli in Explorer?
(C'è anche la possibilità di copiarli in un file di testo con un comando separato, ma è preferibile vederli in IE)