![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
Sto ancora cercando di aggiungere un allarme sonoro a questo indicatore...... Qualcuno può controllare il codice per me perché non funziona?
//|
//|
//+------------------------------------------------------------------+
#property copyright "niva"
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 White
#property indicator_color2 Red
extern bool Email_Enabled = false;
extern bool Alert_Enabled = true;
//---- input parameters
int CountBars=10000;
//---- buffers
double uptrend[];
double downtrend[];
bool AlertSent,EmailSent;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicator line
IndicatorBuffers(2);
SetIndexStyle(0,DRAW_ARROW);
SetIndexArrow(0,217);
SetIndexStyle(1,DRAW_ARROW);
SetIndexArrow(1,218);
SetIndexBuffer(0,val1);
SetIndexBuffer(1,val2);
//----
return(0);
}
//+------------------------------------------------------------------+
//| AltrTrend_Signal_v2_2 |
//+------------------------------------------------------------------+
int start()
{
if (CountBars>=Bars) CountBars=Bars;
int i,shift,counted_bars=IndicatorCounted();
int uptrend, downtrend;
for (shift = CountBars; shift>=0; shift--)
{
if(High[shift-1]>High[shift]&&Low[shift-1]>Low[shift]&&uptrend!=3){
uptrend = uptrend+1;
downtrend=0;
}else if(High[shift-1]<High[shift]&&Low[shift-1]<Low[shift]&&downtrend!=3){
downtrend=downtrend+1;
uptrend=0;
}
else{
uptrend=0;
downtrend=0;
}
if (uptrend==3)
{
val1[shift]=Low[shift];
}
if (downtrend==3)
{
val2[shift]=High[shift];
}
}
return(0);
}
//----
if (Alert_Enabled && (uptrend[0] != 0 || uptrend[0] !=0) && !AlertSent)
{
Alert(Symbol() + "HiLow+3");
AlertSent=true;
}
if (Email_Enabled && (downtrend[0] != 0 || downtrend[0] !=0) && !EmailSent)
{
SendMail(Symbol() + "HiLow+3","HiLow+3 indicator triggered");
EmailSent=true;
}
if(downtrend[0] == 0 && uptrend[0] == 0 )
{
EmailSent=false;
AlertSent=false;
}
return(0);
}
//+------------------------------------------------------------------+Grazie
Da qualche parte nel codice le parentesi sono sbilanciate. Sembra che da qualche parte manchino un } e un ) nel codice. Avrai bisogno di guardare attraverso e contare quante parentesi aperte e chiuse ci sono (+1 per aperto e -1 per chiuso) che dovrebbe dirti quante ne mancano (diciamo che un conteggio di +2 significa due parentesi giuste '}' o viceversa). Se ha indentato correttamente dovresti essere in grado di capire dove mettere la giusta }. Buona caccia Il
Sono riuscito a cambiare alcune impostazioni e finalmente credo di esserci quasi! Ora dopo la seguente codifica dice:
'shortSL' - variabile non definita
'longSL' - variabile non definita
Ecco come appare:
//+------------------------------------------------------------------+
//| Salgado.mq4 |
//| salgadoguilherme@hotmail.com|
//| |
//+------------------------------------------------------------------+
#proprietà copyright ""
#property link "salgadoguilherme@hotmail.com"
extern bool trade=true;
extern int barstocount=50;
extern double lots=0.01;
extern int StopLoss =40;
extern int TakeProfit =10;
extern int slippage=3;
extern int magicnumber=816;
//+------------------------------------------------------------------+
//| funzione di inizializzazione dell'esperto |
//+------------------------------------------------------------------+
int init()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| funzione di deinizializzazione esperto |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| funzione di inizio esperto |
//+------------------------------------------------------------------+
int start()
{
//----
se(trade==true)
{
//M15
double M15_resistance=iCustom(NULL,PERIOD_M15,"!LinRegrBuf", "true",barstocount,2,0);
double M15_resistance_p=iCustom(NULL,PERIOD_M15,"!LinRegrBuf", "true",barstocount,2,barstocount-1);
double M15_line=iCustom(NULL,PERIOD_M15,"!LinRegrBuf", "true",barstocount,0,0);
double M15_support=iCustom(NULL,PERIOD_M15,"!LinRegrBuf", "true",barstocount,1,0);
double slopeM15=((M15_resistance-M15_resistance_p)/barstocount)/Point;
//Alert(DoubleToStr(slopeM15,2);
Comment(
"\n", "Pendenza M15 | ",pendenzaM15,
//SHORT ENTRY
if(slopeM15<0 && IsTradeAllowed()==true)
{
bool shortopen=false;
int ord_cnt1=OrdersTotal();
for (int start1=0;start1<ord_cnt1;start1++)
{
OrderSelect(start1, SELECT_BY_POS, MODE_TRADES);
if(OrderMagicNumber()==magicnumber && OrderType()==OP_SELL)
{shortopen=true;}
}
if(shortopen==false)
{
double M15High=iHigh(Symbol(),PERIOD_M15,0);
if(M15High>=M15_resistenza)
int shortticket=OrderSend(Symbol(),OP_SELL,lots,Bid,slippage,Bid+shortSL,M15_line,DoubleToStr(slopeM15,2);
if(shortticket<0)
{
/LONG ENTRY
if(slopeM15>0 && IsTradeAllowed()==true)
{
bool longopen=false;
int ord_cnt=OrdersTotal();
for (int start=0;start<ord_cnt;start++)
{
OrderSelect(start, SELECT_BY_POS, MODE_TRADES);
if(OrderMagicNumber()==magicnumber && OrderType()==OP_BUY)
{longopen=true;}
}
if(longopen==false)
{
double M15Low=iLow(Symbol(),PERIOD_M15,0);
if(M15Low<=M15_support)
int longticket=OrderSend(Symbol(),OP_BUY,lots,Ask,slippage,Ask-longSL,M15_line,DoubleToStr(slopeM15,2);
if(longticket<0)
{
//----
return(0);
}
//+------------------------------------------------------------------+
Candela tipo Indy
Ciao,
Ho un gran bisogno di tutorial MQL su come codificare gli indicatori di tipo candela come il grafico allegato. Solo i link da qualche parte all'interno o all'esterno di questo forum andrà bene. Grazie mille.
Piper.
Qualcuno potrebbe dirmi come codificare quanto segue;
Contare il numero di barre da quando una MA a breve termine ha attraversato una MA a lungo termine.
Grazie!
Codice EA per riprendere le transazioni dopo lo spegnimento.
Ciao,
C'è qualche codice di esempio per un EA, che può riprendere la gestione dei trade dopo la sua fermata e poi torna di nuovo?
Grazie,
JForex
Come codificare?
Qualcuno potrebbe dirmi come codificare quanto segue;
Conta il numero di barre da quando una MA a breve termine ha attraversato una MA a lungo termine.
Grazie!Sì!
Conta le barre da quando si sono incrociate:
int i;
bool shortGreater = (iMA(NULL,0,8,8,MODE_SMMA,PRICE_MEDIAN,0) > iMA(NULL,0,24,8,MODE_SMMA,PRICE_MEDIAN,0));
bool sgLast;
for(i=0;i<iBars(NULL,0);i++) {
sgLast = shortGreater;
shortGreater = (iMA(NULL,0,8,8,MODE_SMMA,PRICE_MEDIAN,i) > iMA(NULL,0,24,8,MODE_SMMA,PRICE_MEDIAN,i));
if(shortGreater !== sgLast) {
break;
}
}
La variabile i conterrà quindi il numero di barre da quando si sono incrociate.
Sentitevi liberi di mandarmi dei soldi se lo trovate utile. Lo apprezzerei molto.
Ecco qui.
Sono riuscito a cambiare alcune impostazioni e finalmente credo di esserci quasi! Ora dopo la seguente codifica dice:
'shortSL' - variabile non definita
'longSL' - variabile non definita
Ecco qui. Ho preso quello che hai fatto e l'ho modificato in modo che sia compilato. Attenzione, la tua logica è cattiva, sembra incompleta, e probabilmente non farà quello che vuoi.
Ma eccoti servito.
- ChazzMoney
P.S. $170 è ESTREMAMENTE economico per un programma. Io scrivo software di investimento personalizzato una o due volte all'anno per cinque cifre. I programmatori che assumono questo tipo di lavoro dovrebbero stare attenti - è necessario controllare TUTTO per essere sicuri di non perdere un caso. Un bug è buono come un commerciante casuale.
Sentitevi liberi di mandarmi dei soldi se lo avete trovato utile. Apprezzo il pensiero.
codice da ZigZag standard
Ciao
questo codice è da "ZigZag.mq4" standard
"if (counted_bars==0 && downloadhistory) // la storia è stata scaricata"
counted_bars==0 : controllo se il valore è uguale a zero........ è ok.
downloadhistory: non c'è nessun controllo di condizione perché??? per favore chiarisci questo
Grazie.
Apertura di 2 ordini e chiusura di 2 ordini...CONSISTENTEmente.
Ho provato e riprovato per molto tempo a far sì che il mio EA aprisse sempre due ordini di acquisto o di vendita. Uno con TP e l'altro con NESSUNO. Dopo aver aperto 2 ordini poi non aprirne più fino al momento di negoziare nella direzione opposta.
Per qualche ragione, guardo la cronologia del conto e vedo 1 ordine poi 3 ordini poi 4 ordini poi 2 ordini e funziona come spazzatura.
C'è qualche maestro di codifica qui che può dare un'occhiata e darmi un input?
Grazie!!!!!!!!!!!!!!!!
ORDINI APERTI
-------
BuyTicket1 = False;
BuyTicket2 = Falso;
mentre (!BuyTicket1) {
BuyTicket1 = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLoss, Ask + TakeProfit * Point, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue);
Sleep(PausebetweenOrders * 1000);}
//if (BuyTicket1 && SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open 1st Buy");
Sleep(1000);
mentre (!BuyTicket2) {
BuyTicket2 = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLoss, 0, "2nd Buy(#" + MagicNumber + ")", MagicNumber, 0, BlueViolet);
Sleep(PausebetweenOrders * 1000);}
------------
CHIUDERE GLI ORDINI
------------
if(OrdersTotal() > 0) {
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
if(OrderType() == OP_SELL){
for (int j = OrdertotalCloseSell-1; j >= 0; j --) {
PositionClosedSell = False;
AttemptsTriedCloseSell = 0;
OrderSelect(j, SELECT_BY_POS, MODE_TRADES);
while (!PositionClosedSell && AttemptsTriedCloseSell < CloseposnAttempts) {
AttemptsTriedCloseSell = AttemptsTriedCloseSell + 1;
OrderCloseSell = OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, MediumSeaGreen);
Sleep(PausebetweenOrders * 1000);
if( OrderCloseSell == True ) { // Posizione chiusa con successo.