Bisogno di aiuto con la codifica - pagina 8

 

Jo

Qualcosa del genere:

if (MACD[0]>MACD[1]) Alert("Message to use for alert"):
Jovager:
Ciao,

Come posso codificare un allarme in un indicatore?

Per esempio, come avvisare quando MACD[0]>MACD[1]?

Grazie per l'aiuto.

Jo
 
mladen:
Jo

Qualcosa del genere:

if (MACD[0]>MACD[1]) Alert("Message to use for alert"):

Grazie Mladen, ma dove?

Ho avuto i messaggi :

Red -If_function non definito

Red-Alert_Semicolon previsto

------------------------------------------------------------------------------------------------------------------

#proprietà indicator_separate_window

#proprietà indicator_buffers 2

#proprietà indicator_color1 Argento

#proprietà indicator_color2 Red

#proprietà indicator_width1 2

//---- parametri dell'indicatore

extern int FastEMA=12;

extern int SlowEMA=26;;

extern int SignalSMA=9;

//---- buffer dell'indicatore

double MacdBuffer[]

double SignalBuffer[]

//+------------------------------------------------------------------+

//|funzione di inizializzazione dell'indicatore personalizzata |

//+------------------------------------------------------------------+

int init()

{

//---- impostazioni di disegno

SetIndexStyle(0,DRAW_HISTOGRAM);

SetIndexStyle(1,DRAW_LINE);

SetIndexDrawBegin(1,SignalSMA);

IndicatorDigits(Digits+1);

//---- mappatura dei buffer degli indicatori

SetIndexBuffer(0,MacdBuffer);

SetIndexBuffer(1,SignalBuffer);

//---- nome per l'etichetta di DataWindow e sottofinestra dell'indicatore

IndicatorShortName("MACD("+FastEMA+", "+SlowEMA+", "+SignalSMA+")");

SetIndexLabel(0, "MACD");

SetIndexLabel(1, "Segnale");

//---- inizializzazione fatta

return(0);

}

//+------------------------------------------------------------------+

//|Convergenza/Divergenza delle medie mobili

//+------------------------------------------------------------------+

int start()

{

int limite;

int counted_bars=IndicatorCounted();

//---- l'ultima barra contata sarà ricontata

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//---- macd contati nel 1° buffer

for(int i=0; i<limit; i++)

MacdBuffer=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);

//---- linea di segnale contata nel 2° buffer

for(i=0; i<limit; i++)

SignalBuffer=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);

//---- fatto

return(0);

}

//+--------------------------------------------

 

Proprio prima dell'ultimo ritorno nel vostro codice (in questo modo vi assicurate che venga eseguito solo quando tutto il resto dell'elaborazione è finito)

Jovager:
Grazie Mladen, ma dove?

Ho avuto i messaggi :

Rosso -If_funzione non definita

Red-Alert_Semicolon previsto

------------------------------------------------------------------------------------------------------------------

#proprietà indicator_separate_window

#proprietà indicator_buffers 2

#proprietà indicator_color1 Argento

#proprietà indicator_color2 Red

#proprietà indicator_width1 2

//---- parametri dell'indicatore

extern int FastEMA=12;

extern int SlowEMA=26;;

extern int SignalSMA=9;

//---- buffer dell'indicatore

double MacdBuffer[]

double SignalBuffer[]

//+------------------------------------------------------------------+

//|funzione di inizializzazione dell'indicatore personalizzata

//+------------------------------------------------------------------+

int init()

{

//---- impostazioni di disegno

SetIndexStyle(0,DRAW_HISTOGRAM);

SetIndexStyle(1,DRAW_LINE);

SetIndexDrawBegin(1,SignalSMA);

IndicatorDigits(Digits+1);

//---- mappatura dei buffer degli indicatori

SetIndexBuffer(0,MacdBuffer);

SetIndexBuffer(1,SignalBuffer);

//---- nome per l'etichetta di DataWindow e sottofinestra dell'indicatore

IndicatorShortName("MACD("+FastEMA+", "+SlowEMA+", "+SignalSMA+")");

SetIndexLabel(0, "MACD");

SetIndexLabel(1, "Segnale");

//---- inizializzazione fatta

return(0);

}

//+------------------------------------------------------------------+

//|Convergenza/Divergenza delle medie mobili

//+------------------------------------------------------------------+

int start()

{

int limite;

int counted_bars=IndicatorCounted();

//---- l'ultima barra contata sarà ricontata

if(counted_bars>0) counted_bars--;

limit=Bars-counted_bars;

//---- macd contati nel 1° buffer

for(int i=0; i<limit; i++)

MacdBuffer=iMA(NULL,0,FastEMA,0,MODE_EMA,PRICE_CLOSE,i)-iMA(NULL,0,SlowEMA,0,MODE_EMA,PRICE_CLOSE,i);

//---- linea di segnale contata nel 2° buffer

for(i=0; i<limit; i++)

SignalBuffer=iMAOnArray(MacdBuffer,Bars,SignalSMA,0,MODE_SMA,i);

//---- fatto

return(0);

}

//+--------------------------------------------
 

Per favore, correggete l'errore di divisione dello zero quando si usa il timeframe come "0

pivot_crazy.mq4Qualcuno potrebbe risolvere l'errore di divisione dello zero quando si usa il timeframe come "0".

Grazie.

File:
 

Provare per credere. Ora è corretto

privateer:
pivot_crazy.mq4Qualcuno potrebbe risolvere l'errore di divisione dello zero quando si usa il timeframe come "0" Grazie.
File:
 

Grazie a mladen funziona come un incanto

mladen:
Provalo. Ora è corretto

grazie mladen funziona come un incanto

 

Ho bisogno di aiuto con questo ea la sua funzione martingala ma non funziona correttamente per esempio se una posizione è chiusa in perdita la funzione martingala dovrebbe moltiplicare i lotti dell'ultima posizione chiusa in perdita ma c'è un errore nel codice che fa funzionare correttamente la martingala ecco il suo eauniversalmacrossea.mq4

File:
 

Questo modo di aprire un nuovo ordine dopo una perdita non è una martingala + la martingala funziona con le posizioni aperte

blondutrader:
Ho bisogno di aiuto con questo ea la sua funzione martingala ma non funziona correttamente per esempio se una posizione è chiusa in perdita la funzione martingala dovrebbe moltiplicare i lotti dell'ultima posizione chiusa in perdita ma c'è un errore nel codice che fa funzionare correttamente la martingala ecco il suo eauniversalmacrossea.mq4
 

Come posso calcolare la mia dimensione del lotto, quando voglio negoziare con ogni scambio il 5% del mio denaro?

 

sunshineh,

Prova ad usare questa funzione:

double getLots(string symbol, double Risk, double stopLossDistance)

{

RefreshRates();

double lots = 0;

double MinLots = NormalizeDouble(MarketInfo(symbol,MODE_MINLOT) ,2);

double MaxLots = NormalizeDouble(MarketInfo(symbol,MODE_MAXLOT) ,2);

double LotStep = NormalizeDouble(MarketInfo(symbol,MODE_LOTSTEP),2);

int LotDigit = 2;

if(MarketInfo(symbol,MODE_DIGITS)==3 || MarketInfo(symbol,MODE_DIGITS)==5) stopLossDistance *= 10.0;

//

//

//

//

//

if (LotStep==1) LotDigit=0;

if (LotStep==0.1) LotDigit=1;

if (LotStep==0.01) LotDigit=2;

if (Risk>0)

{

if (AccountBalance()>AccountFreeMargin())

lots = NormalizeDouble(AccountFreeMargin()*(Risk/100.0)/(stopLossDistance*MarketInfo(symbol,MODE_TICKVALUE)),LotDigit);

else lots = NormalizeDouble(AccountBalance() *(Risk/100.0)/(stopLossDistance*MarketInfo(symbol,MODE_TICKVALUE)),LotDigit);

}

//

//

//

//

//

lots = NormalizeDouble(NormalizeDouble(lots/LotStep,0)*LotStep,LotDigit);

lots = MathMax(MathMin(lots,MaxLots),MinLots);

return(lots);

}
sunshineh:
Come posso calcolare la mia dimensione del lotto, quando voglio negoziare ad ogni scambio il 5% del mio denaro?