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
Ciao, sono nuovo della programmazione MQL4 e ho una domanda. Attualmente sto scrivendo un EA. Vorrei cambiare il colore di quelle candele quando soddisfano i miei criteri preimpostati. Sarà bene anche se può segnare un segno "Errow" o "Check" sopra o sotto la candela. Mi chiedo se sia possibile. Qualcuno può aiutarmi? Grazie.
Aiuto con EA per tracciare la media mobile sullo schermo
Ciao, sto cercando di imparare a programmare MT4 e non riesco a capire come tracciare una media mobile sullo schermo. Posso ottenere tutte le altre linee e cose che voglio, ma nessuna media mobile.
Qualcuno può indicarmi un codice di esempio?
Grazie in anticipo per il vostro aiuto.
La media mobile è un indicatore standard in Metatrader.
Quindi, trova questo indicatore qui
e allegalo al grafico.
Leggi anche questo thread https://www.mql5.com/en/forum/178706
La media mobile è un indicatore standard in Metatrader.
Quindi, trovate questo indicatore qui
Leggi anche questo thread https://www.mql5.com/en/forum/178706No, hai frainteso la mia domanda. So come allegare un indicatore, nessun problema. Ho bisogno del codice per chiamare l'indicatore dall'interno di un EA in modo che quando carico il mio ea, esso disegnerà automaticamente l'indicatore sul mio schermo.
Spero di essere stato chiaro questa volta?
No, hai frainteso la mia domanda. So come collegare un indicatore, nessun problema. Ho bisogno del codice per chiamare l'indicatore dall'interno di un EA in modo che quando carico il mio ea, esso disegnerà automaticamente l'indicatore sul mio schermo. Spero di essere stato chiaro questa volta?
Un esempio di codice che traccia 2 MA sul grafico:
se (ExtCountedBars<0) return(-1);
se (ExtCountedBars>0) ExtCountedBars--;
int pos=Bars-ExtCountedBars-1;
mentre(pos>=0)
{
ExtMapBuffer1[pos] = iMA(Symbol(),0,MAslow_period,MAslow_shift,MAslow_type,MAslow_price,pos);
ExtMapBuffer2[pos] = iMA(Symbol(),0,MAfast_period,MAfast_shift,MAfast_type,MAfast_price,pos);
pos--;
}Spero che questo aiuti.
FerruFx
Mi chiedevo se qualcuno potesse aiutarmi a far sì che questo EA aumenti i lotti man mano che il conto cresce. Quindi userebbe una percentuale invece di lotti fissi. O semplicemente raddoppiare ogni volta che il conto raddoppierebbe... Grazie in anticipo
#define SIGNAL_BUY 1
#define SIGNAL_SELL 2
#define SIGNAL_CLOSEBUY 3
#define SIGNAL_CLOSESELL 4
#property copyright "Expert Advisor Builder"
#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"
extern int MagicNumber = 0;
extern bool SignalMail = False;
extern bool EachTickMode = True;
extern double Lots = 1.0;
extern int Slippage = 3;
extern bool UseStopLoss = True;
extern int StopLoss = 200;
extern bool UseTakeProfit = False;
extern int TakeProfit = 60;
extern bool UseTrailingStop = True;
extern int TrailingStop = 200;
int BarCount;
int Current;
bool TickCheck = False;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init() {
BarCount = Bars;
if (EachTickMode) Current = 0; else Current = 1;
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit() {
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start() {
int Order = SIGNAL_NONE;
int Total, Ticket;
double StopLossLevel, TakeProfitLevel;
if (EachTickMode && Bars != BarCount) TickCheck = False;
Total = OrdersTotal();
Order = SIGNAL_NONE;
//+------------------------------------------------------------------+
//| Variable Begin |
//+------------------------------------------------------------------+
double Buy1_1 = iClose(NULL, 0, Current + 0);
double Buy1_2 = iOpen(NULL, 0, Current + 3);
double Sell1_1 = iClose(NULL, 0, Current + 0);
double Sell1_2 = iOpen(NULL, 0, Current + 0);
//+------------------------------------------------------------------+
//| Variable End |
//+------------------------------------------------------------------+
//Check position
bool IsTrade = False;
for (int i = 0; i < Total; i ++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if(OrderType() <= OP_SELL && OrderSymbol() == Symbol()) {
IsTrade = True;
if(OrderType() == OP_BUY) {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Buy) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Buy) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if(Bid - OrderOpenPrice() > Point * TrailingStop) {
if(OrderStopLoss() < Bid - Point * TrailingStop) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
} else {
//Close
//+------------------------------------------------------------------+
//| Signal Begin(Exit Sell) |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Signal End(Exit Sell) |
//+------------------------------------------------------------------+
if (Order == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell");
if (!EachTickMode) BarCount = Bars;
IsTrade = False;
continue;
}
//Trailing stop
if(UseTrailingStop && TrailingStop > 0) {
if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) {
if((OrderStopLoss() > (Ask + Point * TrailingStop)) || (OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange);
if (!EachTickMode) BarCount = Bars;
continue;
}
}
}
}
}
}
//+------------------------------------------------------------------+
//| Signal Begin(Entry) |
//+------------------------------------------------------------------+
if (Buy1_1 > Buy1_2) Order = SIGNAL_BUY;
if (Sell1_1 < Sell1_2) Order = SIGNAL_SELL;
//+------------------------------------------------------------------+
//| Signal End |
//+------------------------------------------------------------------+
//Buy
if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("BUY order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");
} else {
Print("Error opening BUY order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
//Sell
if (Order == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {
if(!IsTrade) {
//Check free margin
if (AccountFreeMargin() < (1000 * Lots)) {
Print("We have no money. Free Margin = ", AccountFreeMargin());
return(0);
}
if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;
if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0;
Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink);
if(Ticket > 0) {
if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {
Print("SELL order opened : ", OrderOpenPrice());
if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");
} else {
Print("Error opening SELL order : ", GetLastError());
}
}
if (EachTickMode) TickCheck = True;
if (!EachTickMode) BarCount = Bars;
return(0);
}
}
if (!EachTickMode) BarCount = Bars;
return(0);
}
//+------------------------------------------------------------------+aiuto con il codice
Un esempio di codice che traccia 2 MA sul grafico:
Spero che questo aiuti.
Perfetto. Esattamente quello di cui avevo bisogno. Grazie, FerruFx!
barre degli strumenti che scompaiono.
Qualcuno sa perché le mie barre degli strumenti scompaiono ogni volta che spengo MT4? Devo andare a ricaricare le barre degli strumenti quando riaccendo MT....
problema di compilazione
Forse potete aiutarmi.
A volte quando compilo un nuovo indicatore, MT4 decide di compilare la maggior parte dei miei indicatori ma non tutti. Alcuni dei miei indicatori NON appaiono nella finestra del Navigatore quando questo accade, quindi non posso trascinarli su un grafico. Hai qualche idea del perché questo possa accadere?
Devo spostare alcuni indicatori in una cartella diversa per far sì che tutti i miei indicatori che iniziano con "_TRO_" siano compilati e appaiano nella finestra del Navigatore. Potrebbe essere il "_" davanti al nome a causare il problema?