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
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 doubleCredo 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
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.
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 perQualcuno 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
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'aiutoQuesto è 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?