Come codificare? - pagina 186

 

Ok, sulla domanda originale:

#property indicator_chart_window

#property indicator_buffers 1

#property indicator_color1 Magenta

extern int MAPeriod=200;

extern double iController = 1.386;

//---- buffers

//double Memory[200];

double ExtMapBuffer1[];

int limit = 200;

//---- variables

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

//| Custom indicator initialization function |

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

int init()

{

IndicatorBuffers(1);

//---- drawing settings

SetIndexBuffer(0,ExtMapBuffer1);

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,2);

IndicatorShortName( "Antaria_Rising");

//---- initialization done

return(0);

}

int start()

{

int limit;

//ExtMapBuffer1[1] = ExtMapBuffer1[0];

//ExtMapBuffer1[0] = iController;

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

{

ExtMapBuffer1 = ExtMapBuffer1;

}

ExtMapBuffer1[0] = iController;

return(0);

}[/CODE]

Above is the code for the indicator. Simply, it draws a line that should be updatable via the EA using the intiially mentioned code:

[CODE]temp = iCustom(NULL, 0, "AntariaRising", 200, 1.2, 0, 0); //temp not used. Function returns a double

Credo di voler sostituire l'ultimo pezzo di codice che mi permette effettivamente di aggiornare nell'oggetto incicatore la variabile che sta tracciando, in modo da poterla poi usare come linea di arresto. Il codice rimanente è comunque irrilevante. Quando eseguo la funzione di cui sopra mi aspetto che antaria sposti la posizione da 1,39 o qualunque sia il valore di partenza, a 1,2. Non ricordo se uso la variabile 200. Penso di aver tagliato i commenti dell'intestazione e del piè di pagina, ma l'intero indicatore schiavo è lì, che è AntariaRising indicato nel codice immediatamente sopra

questa era l'unica funzione che ho potuto trovare che parlava con gli oggetti indicatore, e la uso per leggere i valori in altre aree.

 

Riguardo al tuo codice indicatore. È sbagliato.

Var. limite uguale a zero mai.

Togli la stringa:

int limit;

dall'inizio().

 

Aiutatemi con questo codice pls

Voglio che qualcuno mi aiuti con questo codice che apre il trade quando voglio ma lo chiude automaticamente, quindi voglio che faccia trading con lo stop loss non chiudendo quando non si incrocia di nuovo questo è il codice

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

//| JR300.mq4 ||

//| onelove |

//| Forex Forum | Forex Tsd | Metatrader Forum |

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

#proprietà copyright "oneLove"

#property link "https://www.forex-tsd.com"

//---- parametri di ingresso

extern double TakeProfit=250.0;

extern double Lots=0.1;

extern double TrailingStop=35.0;

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

//| funzione di inizializzazione dell'esperto |

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

int init()

{

//----

//----

return(0);

}

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

//| funzione di deinizializzazione esperto |

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

int deinit()

{

//----

//----

return(0);

}

int Crossed (doppia linea1 , doppia linea2)

{

static int last_direction = 0;

static int current_direction = 0;

se(linea1>linea2)direzione_attuale = 1; //su

se(linea1<linea2)direzione_attuale = 2; //giù

if(current_direction != last_direction) //cambiamento

{

ultima_direzione = current_direction

return (last_direction);

}

else

{

return (0);

}

}

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

//| funzione di avvio esperto |

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

int start()

{

//----

int cnt, ticket, totale

doppio shortEma, longEma;

se(Bars<100)

{

Print("barre inferiori a 100");

return(0);

}

se(TakeProfit<10)

{

Print("TakeProfit inferiore a 10");

return(0); // controlla TakeProfit

}

shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,200,0,0,MODE_SMA,PRICE_CLOSE,0);

int isCrossed = Crossed (shortEma,longEma);

totale = OrdiniTotali();

se(totale < 1)

{

se(isCrossed == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,

"Il mio EA",12345,0,Verde);

se(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Ordine BUY aperto : ",OrderOpenPrice());

}

else Print("Errore nell'apertura dell'ordine BUY: ",GetLastError());

return(0);

}

if(isCrossed == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,

Bid-TakeProfit*Point, "My EA",12345,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

Print("Ordine SELL aperto : ",OrderOpenPrice());

}

else Print("Errore nell'apertura dell'ordine SELL: ",GetLastError());

return(0);

}

return(0);

}

for(cnt=0;cnt<totale;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY) // la posizione lunga è aperta

{

// deve essere chiusa?

if(isCrossed == 2)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);

// chiudere la posizione

return(0); // uscire

}

// controlla il trailing stop

se(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-

Point*TrailingStop,OrderTakeProfit(),0,Verde);

return(0);

}

}

}

}

else // passa alla posizione short

{

// deve essere chiusa?

if(isCrossed == 1)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet);

// chiudere la posizione

return(0); // uscire

}

// controlla il trailing stop

se(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

se((OrderStopLoss()>(Ask+Point*TrailingStop)) ||

(OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,

OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

return(0);

}

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

 

Prova questo:

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

//| JR300.mq4 |

//| onelove |

//| Forex Forum | Forex Tsd | Metatrader Forum |

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

#property copyright "oneLove"

#property link "https://www.forex-tsd.com"

//---- input parameters

extern double TakeProfit=250.0;

extern double StopLoss=100.0;

extern double Lots=0.1;

extern double TrailingStop=35.0;

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1 , double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if(line1>line2)current_direction = 1; //up

if(line1<line2)current_direction = 2; //down

if(current_direction != last_direction) //changed

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (0);

}

}

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

//| expert start function |

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

int start()

{

//----

int cnt, ticket, total;

double shortEma, longEma;

if(Bars<100)

{

Print("bars less than 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit less than 10");

return(0); // check TakeProfit

}

shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0);

int isCrossed = Crossed (shortEma,longEma);

total = OrdersTotal();

if(total < 1)

{

if(isCrossed == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+ TakeProfit*Point,

"My EA",12345,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

return(0);

}

if(isCrossed == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,

Bid-TakeProfit*Point,"My EA",12345,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

return(0);

}

return(0);

}

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY) // long position is opened

{

// should it be closed?

//if(isCrossed == 2)

//{

//OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-

Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // go to short position

{

// should it be closed?

//if(isCrossed == 1)

//{

//OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||

(OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,

OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

return(0);

}

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

Grazie

Roger09:
Prova questo:
//+------------------------------------------------------------------+

//| JR300.mq4 |

//| onelove |

//| Forex Forum | Forex Tsd | Metatrader Forum |

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

#property copyright "oneLove"

#property link "https://www.forex-tsd.com"

//---- input parameters

extern double TakeProfit=250.0;

extern double StopLoss=100.0;

extern double Lots=0.1;

extern double TrailingStop=35.0;

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

//| expert initialization function |

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

int init()

{

//----

//----

return(0);

}

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

//| expert deinitialization function |

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

int deinit()

{

//----

//----

return(0);

}

int Crossed (double line1 , double line2)

{

static int last_direction = 0;

static int current_direction = 0;

if(line1>line2)current_direction = 1; //up

if(line1<line2)current_direction = 2; //down

if(current_direction != last_direction) //changed

{

last_direction = current_direction;

return (last_direction);

}

else

{

return (0);

}

}

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

//| expert start function |

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

int start()

{

//----

int cnt, ticket, total;

double shortEma, longEma;

if(Bars<100)

{

Print("bars less than 100");

return(0);

}

if(TakeProfit<10)

{

Print("TakeProfit less than 10");

return(0); // check TakeProfit

}

shortEma = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0);

longEma = iMA(NULL,0,200,0,MODE_SMA,PRICE_CLOSE,0);

int isCrossed = Crossed (shortEma,longEma);

total = OrdersTotal();

if(total < 1)

{

if(isCrossed == 1)

{

ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+ TakeProfit*Point,

"My EA",12345,0,Green);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

Print("BUY order opened : ",OrderOpenPrice());

}

else Print("Error opening BUY order : ",GetLastError());

return(0);

}

if(isCrossed == 2)

{

ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,

Bid-TakeProfit*Point,"My EA",12345,0,Red);

if(ticket>0)

{

if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES ))

Print("SELL order opened : ",OrderOpenPrice());

}

else Print("Error opening SELL order : ",GetLastError());

return(0);

}

return(0);

}

for(cnt=0;cnt<total;cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())

{

if(OrderType()==OP_BUY) // long position is opened

{

// should it be closed?

//if(isCrossed == 2)

//{

//OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-

Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // go to short position

{

// should it be closed?

//if(isCrossed == 1)

//{

//OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet) ;

// close position

//return(0); // exit

//}

// check for trailing stop

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) ||

(OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,

OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

return(0);

}

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

grazie roger09 Dio ti benedica

 

Grazie Roger, ho rimosso la seconda dichiarazione di limite dalla mia funzione di avvio. Sono sorpreso che il compilatore lo permetta, ma non ha avuto un impatto notevole sul mio programma.

Ancora non sono sicuro di come alterare l'istanza in esecuzione di quell'indcatore dal mio EA. Un metodo sarebbe molto apprezzato, o almeno la conferma che l'API attualmente non mi permette di passare informazioni agli indicatori in esecuzione.

Grazie.

 
yingli:
Sto imparando a codificare l'indicatore allegato, ma non ha funzionato, qualcuno potrebbe aiutarmi? È un indicatore molto affidabile e se qualcuno potesse fare un EA per esso è quasi un Santo Graal.

Il principio di base è:

1. aprire la posizione di vendita quando appare la freccia rossa,

2. aprire una posizione di acquisto quando appare la freccia bianca e chiudere automaticamente tutte le posizioni di vendita.

3.apply per qualsiasi timeframe.

4.no stop loss,

5.add funzione di ordine.

In attesa di risposta!

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

//| IINWMARROWS.mq4

//| Basato su EMA_CROSS.mq4

//| Copyright ?2006, MetaQuotes Software Corp. |

//| Forex Trading Software: Piattaforma di Trading Forex MetaTrader 4 | //|

//| Ultima piccola modifica di Iin Zulkarnain ||

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

#proprietà copyright "Copyright 2006, MetaQuotes Software Corp.

#property link "http://www.metaquotes.net"

//----

#proprietà indicator_chart_window

#proprietà indicator_buffers 2

#proprietà indicator_color1 White

#proprietà indicatore_colore2 Rosso

#proprietà indicator_width1 2

#proprietà indicator_width2 2

//----

doppio CrossUp[];

doppio CrossDown[];

extern int FasterMode=3; //0=sma, 1=ema, 2=smma, 3=lwma

extern int FasterMA= 3;

extern int SlowerMode=3; //0=sma, 1=ema, 2=smma, 3=lwma

extern int SlowerMA= 3;

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

//| funzione di inizializzazione dell'indicatore personalizzato

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

int init()

{

//---- indicatori

SetIndexStyle(0, DRAW_ARROW, EMPTY);

SetIndexArrow(0, 233);

SetIndexBuffer(0, CrossUp);

SetIndexStyle(1, DRAW_ARROW, EMPTY);

SetIndexArrow(1, 234);

SetIndexBuffer(1, CrossDown);

//----

return(0);

}

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

//| Funzione personalizzata di deinizializzazione dell'indicatore |

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

int deinit()

{

//----

//----

return(0);

}

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

//| Funzione di iterazione dell'indicatore personalizzato |

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

int start()

{

int limit, i, counter;

double fasterMAnow, slowerMAnow, fasterMAprevious, slowerMAprevious, fasterMAafter, slowerMAafter;

doppio Range, AvgRange;

int counted_bars=IndicatorCounted();

//---- controllo di possibili errori

if(counted_bars<0) return(-1);

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

if(counted_bars>0) counted_bars--;

//----

limit=Bars-counted_bars;

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

{

counter=i;

Range=0;

AvgRange=0;

for(counter=i ;counter<=i+9;counter++)

{

AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);

}

Range=AvgRange/10;

fasterMAnow=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i);

fasterMAprevious=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i+1);

fasterMAafter=iMA(NULL, 0, FasterMA, 0, FasterMode, PRICE_CLOSE, i-1);

//----

slowerMAnow=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i);

slowerMAprevious=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i+1);

slowerMAafter=iMA(NULL, 0, SlowerMA, 0, SlowerMode, PRICE_OPEN, i-1);

se ((fasterMAnow > slowerMAnow) && (fasterMAprecedente slowerMAafter))

{

CrossUp=Low - Range*0.5;

}

else if ((fasterMAnow slowerMAprevious) && (fasterMAafter < slowerMAafter))

{

CrossDown=High + Range*0.5;

}

}

return(0);

}

//+------------------------------------------------------------------+questo thread per imparare a codificare correttamente, sto imparando a codificare per

Qualcuno potrebbe aiutare a codificare un allarme per questo indicatore, il suo davvero cool.

 

Il calcolatore di Oscar di George - Qualcuno può codificare un indicatore per esso?

Ciao gente,

Non so se qualcuno conosce Forex Made-EZ di George Smith.

Attualmente sto rivedendo il suo lavoro e mi chiedevo se qualcuno ha codificato un indicatore per l'oscillatore Oscar che usa?

La formula è

lascia A = il massimo più alto delle ultime otto barre (inclusa questa)

lascia B = il minimo più basso delle ultime otto barre (inclusa questa)

lasciamo C = prezzo di chiusura delle barre attuali

lasciamo X = la figura precedente dell'oscillatore (Oscar)

L'oscillatore "grezzo" di oggi è uguale a (C-B) diviso per (A-B) per 100.

Poi "smussiamo" il nostro numero grezzo (chiamiamolo Y) in questo modo:

Numero finale dell'oscillatore = ((X diviso per 3) per 2), più (Y diviso per 3).

Se qualcuno ha codificato questo o può codificare questo sarebbe molto apprezzato.

Saluti Steve

 

Trailing Stop invertito

Salve,

Voglio un aiuto per un'idea.

Sto usando i trailing stop sui miei EA (3 step trailing), ma voglio fare la cosa invertita per proteggere le perdite.

Cercherò di spiegare:

Apro un ordine, con uno stop loss iniziale.

Se il trade va 15 pip in perdita e torna indietro di 10 pip, chiudo il trade (primo passo).

Se il trade va 30 pip in perdita e torna indietro di 15 pip, chiudo il trade (secondo passo).

Qualcosa del genere.

Grazie per l'aiuto

 
dedreko:
Ciao,

Voglio un aiuto per un'idea.

Sto usando i trailing stops sui miei EAs (3 step trailing), ma voglio fare la cosa inversa per proteggere le perdite.

Cercherò di spiegare:

Apro un ordine, con uno stop loss iniziale.

Se il trade va 15 pips in perdita e torna indietro di 10 pips, chiudo il trade (primo passo).

Se il trade va in perdita di 30 pip e torna indietro di 15 pip, chiudo il trade (secondo passo).

Qualcosa del genere.

Grazie per l'aiuto

Questo è qualcosa di nuovo per me.

Quindi, la chiusura del trade in perdita deve sempre aspettare che rimbalzi, giusto?

E se non rimbalza?

Chiuderemo allo SL iniziale?