Come codificare? - pagina 167

 
 

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

mrwobbles:
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.

File:
ma_candles.gif  15 kb
 

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?

darvasboxes:
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.

Guilhermesalgado:
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.

File:
 

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.