Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 6. - pagina 1139
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
Ci sono dei robot per Android?
Non c'è autotrading nella versione mobile di Metatrader ed è improbabile che appaia nel prossimo futuro. Se vuoi controllare il robot dal tuo telefono, hai bisogno di un VPS che ospiti il terminale con il robot, + il software per l'accesso remoto sul tuo telefono.
Apro dieci grafici settimanali di coppie di valute in MT5 e il terminale carica 800 megabyte di storia dei tick. È costantemente caricato, anche se non ci sono quasi cambiamenti sui grafici. La domanda è perché ho bisogno della cronologia dei tick, se uso solo i grafici settimanali? A proposito, su MT4 i grafici settimanali si aprono istantaneamente senza alcun ritardo.
questa è una caratteristica di mt5 - caricare tutto su m1 e poi costruire il periodo richiesto... ....
e così ogni volta, per ogni simbolo
L'idea dell'EA è di comprare o vendere quando il prezzo tocca un livello orizzontale o una linea di tendenza disegnata manualmente. Ho fatto un EA con diversi EA funzionanti e indicatori. Ma l'EA non funziona. O meglio, apre solo SELL senza alcun segnale sul primo tick. Cosa c'è che non va?
/+------------------------------------------------------------------+
//| |
//| Copyright © 2010, MetaQuotes Software Corp.
//| http://www.mql4.com/ru/users/rustein |
//+------------------------------------------------------------------+
#define MAGIC 131313 //aprire un canale verso l'interno
//---------------------------------------
extern inttern TF=15;
//+------------------------------------------------------------------+
extern int StopLoss = 300;
//--------------------------------------------
extern double TakeProfit = 3000;
//--------------------------------------
extern int Per_MA= 20;
//---- costanti
#define OP_BUY_ 0
#define OP_SELL_ 1
//-------------------------------------------------------------------+
extern double Lots = 0.1;
extern double MaximumRisk = 1;
extern double DecreaseFactor = 0;
bool b_1=true, s_1=true;
//+------------------------------------------------------------------+
//| Calcolare le posizioni aperte
//+------------------------------------------------------------------+
double MA=iMA(NULL,TF,Per_MA,0,0,0,1);
int CalcolaOrdiniCorrenti(simbolo stringa)
{
int buys=0,sells=0;
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC)
{
se(OrderType()==OP_BUY) compra++;
se(OrderType()==OP_SELL) vende++;
}
}
//---- volume degli ordini di ritorno
if(buys>0) return(buys);
else return(-sells);
}
//+------------------------------------------------------------------+
//| Calcolare la dimensione ottimale del lotto
//+------------------------------------------------------------------+
doppio LottiOttimizzati()
{
doppio lotto=Lotti;
int orders=HistoryTotal(); // totale degli ordini della storia
int perdite=0; // numero di ordini di perdite senza una pausa
//---- selezionare la dimensione del lotto
//lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,2);
lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/100/MarketInfo(Symbol(),MODE_TICKVALUE)/StopLoss,2);
//---- calcolare il numero di ordini di perdite senza una pausa
se(Fattore di diminuzione>0)
{
for(int i=ordini-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Errore nella storia!"); break; }
if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continua;
//----
if(OrderProfit()>0) break;
se(OrderProfit()<0) perdite++;
}
if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,2);
}
//---- restituire la dimensione del lotto
se(lotto<0,01) lotto=0,01;
ritorno(lotto);
}
//-------------------------------------------------
/* questa parte dell'indicatore
int CheckBreakoutLines(int shift)
{
// Oggetti totali
int obj_total = ObjectsTotal();
// Ora del bar
datetime now = Time[shift];
// Iterare
for(int i = obj_total - 1; i >= 0; i--)
{
// Nome dell'oggetto
stringa label = ObjectName(i);
// Tipi
int OType = ObjectType(label);
bool trendline = false;
bool hline = false;
// Prezzo da valutare
doppio cprice = 0;
// Linee di tendenza
se(OType == OBJ_TREND )
{
bool ray = ObjectGet(label, OBJPROP_RAY);
se(!ray)
{
datetime x1 = ObjectGet(label, OBJPROP_TIME1);
datetime x2 = ObjectGet(label, OBJPROP_TIME2);
if(x1 < ora && x2 < ora) continua;
}
cprice = GetCurrentPriceOfLine(label, shift);
linea di tendenza = vero;
} else if(OType == OBJ_HLINE ) {
cprice = ObjectGet(label, OBJPROP_PRICE1);
hline = vero;
} else {
continuare;
}
// Breakout e falsi breakout di trendlines e hlines
if(MA>cprice &&Ask<cprice)
{
if(trendline) { return(OP_BUY_); } else if(hline) { return(OP_BUY_); }
} else if(MA>cprice &&Ask<cprice) {
if(trendline) { return(OP_SELL_); } else if(hline) { return(OP_SELL_); }
}
}
return(EMPTY_VALUE);
}
double GetCurrentPriceOfLine(string label, int shift)
{
double price1 = ObjectGet(label, OBJPROP_PRICE1);
double price2 = ObjectGet(label, OBJPROP_PRICE2);
datetime d1 = ObjectGet(label, OBJPROP_TIME1);
datetime d2 = ObjectGet(label, OBJPROP_TIME2);
int shiftfrom = iBarShift(Symbol(), 0, d1, false);
int shiftto = iBarShift(Symbol(), 0, d2, false);
int lapse = MathAbs(shiftto - shiftfrom);
int distance = MathAbs(shift - shiftfrom);
doppio pendiente = (prezzo2 - prezzo1) / giro;
doppio cpoint = prezzo1 + (distanza * pendiente);
ritorno(cpoint);
}
//-------------------------------------------------------------------------------------------------------------
//+------------------------------------------------------------------+
//controllare le condizioni di ordine aperto
//+------------------------------------------------------------------+
void CheckForOpen()
{
int res;
//--------------------------------------------------------------------+
//--------------------------------------------------------------------+
//---- condizioni di acquisto
se(OP_BUY_&&b_1)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,Ask-(StopLoss*Point),Ask+TakeProfit*Point," VV",MAGIC,0,Green);
b_1=falso; s_1=vero;
ritorno;
}
//---- condizioni di vendita
se(OP_SELL_&&s_1)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+(StopLoss*Point),Bid-TakeProfit*Point," VV",MAGIC,0,Red);
s_1=falso;b_1=vero;
ritorno;
}
//----
}
//+------------------------------------------------------------------+
//| Iniziare la funzione |
//+------------------------------------------------------------------+
void start()
{
//---- controllare la storia e il commercio
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calcolare gli ordini aperti in base al simbolo corrente
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
}
//+------------------------------------------------------------------+
//|---------------------------// END //------------------------------|
//+------------------------------------------------------------------+
L'idea dell'EA è di comprare o vendere quando il prezzo tocca un livello orizzontale o una linea di tendenza disegnata manualmente. Ho fatto un EA con diversi EA funzionanti e indicatori. Ma l'EA non funziona. O meglio, apre solo SELL senza alcun segnale sul primo tick. Cosa c'è che non va?
/+------------------------------------------------------------------+
//| |
//| Copyright © 2010, MetaQuotes Software Corp.
//| http://www.mql4.com/ru/users/rustein |
//+------------------------------------------------------------------+
#define MAGIC 131313 //aprire un canale verso l'interno
//---------------------------------------
extern inttern TF=15;
//+------------------------------------------------------------------+
extern int StopLoss = 300;
//--------------------------------------------
extern double TakeProfit = 3000;
//--------------------------------------
extern int Per_MA= 20;
//---- costanti
#define OP_BUY_ 0
#define OP_SELL_ 1
.....................................
.....................................
//---- controllare la storia e il commercio
if(Bars<100 || IsTradeAllowed()==false) return;
//---- calcolare gli ordini aperti in base al simbolo corrente
if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
}
//+------------------------------------------------------------------+
//|---------------------------// END //------------------------------|
//+------------------------------------------------------------------+
Ho caricato il programma nel blocco note e ho cancellato le righe vuote. È diventato possibile coprire con uno sguardo. Ha premuto il pulsante SRC e ha incollato. Ecco cosa è venuto fuori. 1) Perché si dovrebbe definire
se abbiamo già OP_BUY=0 e OP_SELL=1
2) La radice di tutto il male è in questo frammento. Una stessa condizione (MA>cprice &&Ask<cprice) viene controllata due volte, e vengono prese decisioni diverse.
3) Dopo di che ogni ramo esegue dei controlli ma il risultato è sempre lo stesso
In generale, la linea di cui sopra può essere semplificata e scritta come segue
if(trendline)return OP_BUY; if(hline) return OP_BUY; или еще проще if(trendline or hline) return OP_BUY;
Ho caricato il programma nel blocco note e ho cancellato le righe vuote. È diventato possibile coprire con uno sguardo. Ha premuto il pulsante SRC e ha incollato. Ecco cosa è venuto fuori. 1) Perché si dovrebbe definire
se abbiamo già OP_BUY=0 e OP_SELL=1
2) La radice di tutto il male è in questo frammento. Una stessa condizione (MA>cprice &&Ask<cprice) viene controllata due volte, e vengono prese decisioni diverse.
3) Dopo di che ogni ramo esegue dei controlli ma il risultato è sempre lo stesso
La linea sopra può essere semplificata e scritta come segue
Grazie per la risposta, ma apre ancora solo SELL, come lo vedo da OP_SELL = 1. Questa condizione è sempre soddisfatta. L'ho riscritto così
Gli ordini hanno smesso di aprirsi, secondo me, int CheckBreakoutLines(int shift) non funziona.
Cari professionisti. Cosa devo fare prima o dopo l'installazione di MT4 in modo che in seguito la cronologia delle quotazioni venga scritta/letta da qualsiasi disco tranne quello di sistema o non è possibile?
MT4 da tutti i broker scarica tutto in C:-Users\MAN\AppData\Roaming\MetaQuotes\Terminal\100.......001\history\downloads (rispettivamente per ogni broker e per ogni loro terminale). Due MT4 su due broker per 3-4 coppie hanno consumato 25GB, cioè tutta la memoria libera. Anche le citazioni necessarie sono caricate nel tester C:\Users\.......\tester\history.
Per favore, aiutatemi a consigliare senza tener conto della reinstallazione di Windows (ho 7) con la riallocazione delle dimensioni del disco. Forse sto facendo qualcosa di sbagliato? Se me lo sono perso ed è già stato discusso da qualche parte - per favore lanciami un link...
Grazie in anticipo.
Cari professionisti. Cosa devo fare prima o dopo l'installazione di MT4 in modo che la cronologia delle quotazioni venga scritta/letta da qualsiasi disco tranne quello di sistema o non è possibile?
MT4 da tutti i broker scarica tutto in C:-Users\MAN\AppData\Roaming\MetaQuotes\Terminal\100.......001\history\downloads (rispettivamente per ogni broker e per ogni loro terminale). Due MT4 su due broker per 3-4 coppie hanno consumato 25 GB, cioè tutta la memoria libera. Anche le citazioni necessarie sono caricate nel tester C:\Users\.......\tester\history.
Per favore, aiutatemi a consigliare senza tener conto della reinstallazione di Windows (ho 7) con la riallocazione delle dimensioni del disco. Forse sto facendo qualcosa di sbagliato? Se me lo sono perso ed è già stato discusso da qualche parte - per favore lanciami un link...
Grazie in anticipo.
Basta copiare l' intera cartella del terminale in un'unità non di sistema, creare un collegamento ad essa e scrivere lo switch /portable