[Archivio!] Scriverò un consulente GRATIS - pagina 13

 

Ciao!

C'è qualcuno che sa come prescrivere correttamente quanto segue nel codice:

C'è un indicatore MACD Histogramm WIS. L'istogramma è calcolato nel suo codice e le barre colorate, a seconda della direzione della linea e del filtro macd in diversi colori.

int start()
{
int limit,i;
int counted_bars = IndicatorCounted();

if(counted_bars > 0) counted_bars--;
limit = iBars(NULL,0) - counted_bars;

BufferResize(Filter);
BufferResize(Histogram);

for(i = 0; i <= limit; i++)
MACD[i] = iMA(NULL, 0, FastMA, 0, MAMethod, MAAppliedPrice, i) - iMA(NULL, 0, SlowMA, 0, MAMethod, MAAppliedPrice, i);
for(i = 0; i <= limite; i++)
Signal[i] = iMAOnArray(MACD, iBars(NULL,0), SignalMA, 0, MAMethod, i);
for(i = 0; i <= limite; i++)
Histogram[i] = MACD[i] - Signal[i];
CalcFilter(Line, limit);
for(i = limit; i >= 0; i--)
{
if(Histogram[i] > Histogram[i+1] && Filter[i] > Filter[i+1])
{
HistogramWaitClose[i] = 0.0;
HistogramSell[i] = 0,0;
HistogramBuy[i] = Histogram[i];
}
if(Histogram[i] < Histogram[i+1] && Filter[i] < Filter[i+1])
{
HistogramWaitClose[i] = 0,0;
HistogramSell[i] = Histogram[i];
HistogramBuy[i] = 0,0;
}
if((Istogramma[i] >= Istogramma[i+1] && Filtro[i] <= Filtro[i+1]) || (Istogramma[i] <= Istogramma[i+1] && Filtro[i] >= Filtro[i+1])
{
HistogramWaitClose[i] = Histogram[i];
HistogramSell[i] = 0,0;
HistogramBuy[i] = 0,0;
}
}

return(0);
}

Sto cercando di prescrivere nell'Expert Advisor, una delle condizioni, l'apertura di posizioni verso l'alto se:

if(Histogram[i] > Histogram[i+1] && Filter[i] > Filter[i+1])
{
HistogramWaitClose[i] = 0,0;
HistogramSell[i] = 0,0;
HistogramBuy[i] = Histogram[i];

ma ho bisogno di confrontare solo 2 barre chiuse, cioè il primo e il secondo (zero non toccare), non tutti (i-bar), cioè bisogno di confrontare la prima e la seconda barra, e se il grafico a barre della prima barra maggiore del secondo e le condizioni di filtro e altre condizioni sono soddisfatte, quindi acquistare, per vendere l'opposto .... come prescrivere correttamente, si prega di consigliare, tè imparato dilettante)

Grazie

 
kvg31:

Scriverò un consulente di qualsiasi complessità. La cosa principale è avere una buona idea. Come lo userete non mi interessa: venderà - non mi importa (non chiederò soldi).

P. S. Se hai bisogno di un indicatore, devi dirmi la strategia in cui vuoi usarlo.


Non so nulla di programmazione e sono un principiante.

Forse questo consigliere ha già, in generale, così:

Sul principio di "oscillazione" due EMA che attraversano chiude il precedente apre uno nuovo, EMA dovrebbe essere variabile.

Penso che su H1, H4 sia abbastanza rilevante.

 
riabusha:


Forse un tale EA esiste già, ecco come funziona:

Sul principio del "rollover" l'incrocio di due EMA chiude il precedente ne apre uno nuovo, le EMA dovrebbero essere variabili.

Penso che su H1, H4 sia abbastanza rilevante.

Sì, è la media mobile standard inclusa nel pacchetto MT4. Ma non è EMA, ma SMA (Simple Moving Average), il che non cambia la questione. Naturalmente, possiamo cambiare il tipo di MA nell'EA o anche spostarlo su parametri esterni, ma non diventerà un graal.
 

Salve.

Si prega di fare un semplice Expert Advisor che apre un ordine per una certa quantità di punti e se il prezzo li supera e chiude nel lato +, l'ordine si chiude e riapre nel lato +. Se è in una posizione negativa, si inverte nella posizione negativa.

Parametri da impostare - Dimensione del lotto e numero di punti da passare.

Molte grazie in anticipo.

Saluti Dimitriy.

 
kvg31:

Scriverò un consulente di qualsiasi complessità. La cosa principale è avere una buona idea. Come lo userete non mi interessa: venderà - non mi importa (non chiederò soldi).

P. S. Se hai bisogno di un indicatore, devi parlarmi della strategia in cui vuoi usarlo.


Ciao cari sviluppatori. Per favore aiutatemi a creare un indicatore basato sull'indicatore SSL_fast_sBar_mtf.

Voglio che disegni due "righelli", uno con valore "Lb" più grande e un altro con valore più piccolo (o TIME FREAM più grande e più piccolo). Se sulla barra i colori

se entrambi i "righelli" sono uguali (e su quello precedente erano diversi), allora all'inizio della prossima barra dovreste dare il segnale di apertura (mettere la freccia).

Le frecce dovrebbero essere disegnate usando buffer di indicatori, non oggetti grafici. I dati di entrambi i "righelli" sono richiesti nella finestra dei parametri esterni

(per un'ulteriore selezione dei loro parametri).

 

http://savepic.ru/1965498.gif

Non so come inviare un link all'indicatore. È nella libreria MQL4.com

 

Buon pomeriggio!

Molto chiedo di fare un esperto (beh, non sono un programmatore) :((.

Parametri tecnici:
1) Lavoriamo su un grafico a candele di 4 ore incrociando due linee Moving Average: una(Rossa) periodo 18, metodo Esponenziale, perchiudere i prezzi, rispettivamente(Gialla) periodo 8, metodo anche Esponenziale, per chiudere i prezzi.

2) Dimensione del commercio 1 lotto

3) Lavoriamo da linee di crossover a linee di crossover. Non appena la lineagialla attraversa la linea rossa(Red) nella direzione verso l'alto (nord), ordine di acquisto, il secondo incrocio di linee, la linea gialla attraversa di conseguenza quella rossa dall'alto verso il basso - fissaggio dell'ordine aperto, con apertura simultanea di un nuovo ordine di vendita, e così via.

4) Uno stop loss di 35 punti è impostato per tutti i trade.

Il grafico a 4 ore ti permette di evitare movimenti inutili, a differenza del grafico a ore, lavorando di sicuro.

Se si guarda solo alle coppie di valute, l'idea si giustifica da sola (nessun trade in perdita, intorno allo zero nel peggiore dei casi), naturalmente, si dovrebbe prendere in considerazione la tendenza e utilizzare l'Expert Advisor con un occhio di riguardo. Per esempio, per EUR/USD, se il 1° settembre compriamo +139 punti prima di attraversare +115 punti, poi compriamo di nuovo prima di attraversare +1184 punti il 12 ottobre. Prendete agosto la stessa immagine +368 punti vendita, poi comprare vendita allo stesso livello senza perdite e +181 punti giù sulla vendita di profitto. Inoltre, per esempio oro ORO(la commissione è 70 punti, ma il punto è 2,5 dollari per lotto) e così dal 31 agosto comprare +1789 punti, subito vendere +547 punti, comprare +4557 punti, vendere zero, +4328 comprare, vendere zero e fino a questo fine settimana ancora +3636 punti.

Saluti, Yuriy

 
Ciao ragazzi, non riesco a capire mql4(( Voglio scrivere un piccolo EA basato su due EMA (medie mobili) che danno un segnale acustico dopo l'incrocio? Puoi dirmi qualcosa di questo programma? Grazie in anticipo!!!
 
silmin85:
Ciao ragazzi, non riesco a capire mql4(( Voglio scrivere un piccolo EA basato su due EMA (medie mobili) che danno un segnale acustico dopo l'incrocio? Puoi dirmi qualcosa su questo programma? Grazie in anticipo!!!
Prendete la media mobile standard inclusa nel pacchetto come base e sperimentate con essa. Potete sostituire MA con EMA.
 
goldtrader:
Prendete la media mobile standard fornita come base e sperimentate con essa. Potete sostituire la MA con l'EMA.
Il fatto è che voglio un semplice EA che dia un segnale acustico ogni volta che incrocia due EMA! MetaTradere ha una media mobile.mq4 in esperti

Ecco la descrizione completa:

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

//| Media mobile.mq4 |
//| Copyright © 2005, MetaQuotes Software Corp.
//| http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#define MAGICMA 20050610

extern double Lots = 0.1;
extern double MaximumRisk = 0,02;
extern double DecreaseFactor = 3;
extern double MovingPeriod = 12;
extern double MovingShift = 6;
//+------------------------------------------------------------------+
//| Calcolare le posizioni aperte
//+------------------------------------------------------------------+
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()==MAGICMA)
{
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,1);
//---- 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,1);
}
//---- restituire la dimensione del lotto
se(lotto<0,1) lotto=0,1;
ritorno(lotto);
}
//+------------------------------------------------------------------+
//controllare le condizioni di ordine aperto
//+------------------------------------------------------------------+
void CheckForOpen()
{
doppio ma;
int res;
//---- go trading solo per i primi tik del nuovo bar
se(Volume[0]>1) ritorno;
//---- ottenere la media mobile
ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---- condizioni di vendita
if(Open[1]>ma && Close[1]<ma)
{
res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,",MAGICMA,0,Red);
ritorno;
}
//---- condizioni di acquisto
if(Open[1]<ma && Close[1]>ma)
{
res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,",MAGICMA,0,Blue);
ritorno;
}
//----
}
//+------------------------------------------------------------------+
//controllare le condizioni di chiusura dell'ordine
//+------------------------------------------------------------------+
void CheckForClose()
{
doppio ma;
//---- go trading solo per i primi tik del nuovo bar
se(Volume[0]>1) ritorno;
//---- ottenere la media mobile
ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//----
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continua;
//---- controllare il tipo di ordine
if(OrderType()==OP_BUY)
{
if(Open[1]>ma && Close[1]<ma) OrderClose(OrderTicket(),OrderLots(),Bid,3,White);
pausa;
}
if(OrderType()==OP_SELL)
{
if(Open[1]<ma && Close[1]>ma) OrderClose(OrderTicket(),OrderLots(),Ask,3,White);
pausa;
}
}
//----
}
//+------------------------------------------------------------------+
//| 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();
else CheckForClose();
//----
}

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

Come faccio a cambiarlo qui per farlo funzionare per me non capisco! Voglio solo 50EMA e 100EMA e un segnale acustico ad ogni incrocio!!!

Motivazione: