[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 279
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
E se ha un codice per 70 sterline invece di 60? :) ;)
Ciao, puoi dirmi come determinare quanti pips un ordine è in profitto?
Se viene aperta una posizione di acquisto, sottrarre il prezzo di apertura dal prezzo Bid corrente. Se la posizione è una posizione di vendita, sottrarre l'attuale prezzo Ask dal prezzo di apertura.
Gli scout hanno scoperto che OrderClosePrice() può essere usato al posto di Bid o Ask
Cari utenti del forum, potreste per favore consigliarmi come mettere una variabile di iCustom in ArrayMaximum?
int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)
Cerca l'elemento con il valore massimo. La funzione restituisce la posizione dell'elemento massimo nella matrice.La ricerca è un processo, non una variabile. Cioè, potete assegnare un valore di indicatore a un elemento dell'array, e poi cercare l'array per l'elemento più grande con ArrayMaximum.
Per questo dovresti leggere cos'è ArrayMaximum.
int ArrayMaximum( double array[], int count=WHOLE_ARRAY, int start=0)
Cerca l'elemento con il valore massimo. La funzione restituisce la posizione dell'elemento massimo nella matrice.La ricerca è un processo, non una variabile. Cioè, potete assegnare un valore di indicatore a un elemento dell'array e poi cercare l'array per l'elemento massimo con ArrayMaximum.
Buon pomeriggio a tutti, sono seduto davanti al mio computer a sbattere la testa contro la tastiera - non riesco a risolvere un bug nel codice ... Per favore, aiutate un principiante.
Ecco il mio codice civetta:
extern double TakeProfit = 500;
extern double Lots = 0.1;
extern double Stoploss = 30;
extern double TrailingStop = 30;
extern string Indicator_1 = "SAR (SAR_STEP)";
extern double SAR_Step = 0.02;
extern double SAR_MaxStep =0.2;
extern double GeneralShift = 0; // 0 - barra non chiusa, 1 - chiusa.
// Queste sono le variabili che saranno
// visualizzato durante
// collegamento dell'Expert Advisor con il grafico
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
doppio a;
int b;
int totale, biglietto, cnt;
//solo variabili da usare nel programma
se(Bars<100)
{
Stampa("barre inferiori a 100");
ritorno(0);
}
// Questa condizione controlla se la storia del grafico contiene più di 100 candele e, in caso contrario, restituisce un errore,
// genererà un errore. È necessario attirare la vostra attenzione sul problema di
// mancanza di informazioni
se(TakeProfit<5)
{
Print("TakeProfit inferiore a 5");
ritorno(0);
}
// Questa condizione controlla il livello di TakeProfit (una delle variabili esterne,
// che controlla il livello di presa di profitto. È necessario controllare se // avete impostato i livelli di Take Profit.
// controlla se hai impostato livelli di presa di profitto a un livello non consentito dalla tua società di intermediazione.
// Non consentito per la vostra società di intermediazione. È così che se il tuo Expert Advisor fallisce, tu // sai esattamente qual è l'errore.
// dove si trova l'errore. Consiglio vivamente di impostarlo.
total=OrdersTotal();
se(totale<1)
// Questo controllo è necessario per evitare di aprire diverse posizioni identiche in una volta sola. Se non è controllato, allora, per esempio, se il tuo EA viene attivato quando lo stocastico è nella zona di ipercomprato, allora farà trading su ogni tick fino a quando non avrà usato tutto il margine.
// Quindi, per limitare il numero di posizioni aperte, questo
// limitatore. Se è impostato, allora l'Advisor non aprirà più di un certo // numero di
// numero di posizioni <x
{
// nessun ordine aperto identificato
se(AccountFreeMargin()<(1000*Lots))
{
Print("Non abbiamo soldi. Free Margin = ", AccountFreeMargin();
ritorno(0);
}
// Un altro pezzo di codice ausiliario. Se non c'è abbastanza denaro nel conto, si
// stampa un errore. Questo pezzo è completamente inutile se l'Expert Advisor funziona
// tempo reale, ma è molto utile nei test sulla storia.
if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)>Close[0]); // Open BUY
// Finalmente arriviamo alla parte più interessante. Al posto di queste x, dobbiamo inserire
// condizione che fa scattare un BUY.
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-Stoploss*Point, Ask+TakeProfit*Point, "comment",16384,0,Green);
// Queste sono le condizioni di acquisto. In linea di principio, non c'è niente da cambiare qui, ma per allargare /i miei orizzonti, allargo il campo.
// Decifrerò quello che c'è scritto qui. Qui dice che dobbiamo comprare
// (OP_BUY) il simbolo corrente (coppia di valute, al cui grafico è stato collegato questo Expert Advisor),
// dimensione del trade Lotti (variabile che viene impostata all'inizio). Prezzo di mercato, con
// slippage 3, e con uno StopLoss e un TakeProfit impostati al
all'// inizio, lo scambio sarà segnato con il commento "comment", con il numero determinante 0, e al
// al punto di acquisto, sul grafico, ci sarà un cursore verde con il codice determinante
// 16384
se(biglietto>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Ordine BUY aperto: ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
ritorno(0);
}
// Questo blocco è necessario solo per registrare se tutto è andato bene.
// O, altrimenti, per registrare un errore che ha causato il fallimento di qualcosa.
// Ora la stessa cosa con la scommessa di vendita. Invece di YYYYYYY - condizione
se(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)<Close[0])
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+Stoploss*Point,Bid-TakeProfit*Point, "macd sample",16384,0,Red);
se(biglietto>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
}
else Print("Error opening SELL order : ",GetLastError());
ritorno(0);
}
ritorno(0);
}
// Ora l'uscita. Anche qui non è cambiato nulla, è solo RRRRRRRR - condizione
// chiudere uno scambio con BUY, ZZZZZZZZZZ - con SELL
per(cnt=0;cnt
// tutte le posizioni aperte sono cercate con
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && // controlla le posizioni aperte
OrderSymbol()==Symbol()) // controlla il simbolo
{
if(OrderType()==OP_BUY) // la posizione lunga è aperta
{
// dovrebbe essere chiuso?
if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)<Close[0]) //chiude BUY.
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // chiudere la posizione
return(0); // uscire
}
// controlla il trailing stop
se(TrailingStop>0)
{
se(Bid-OrderOpenPrice()>Point*TrailingStop)
{
se(OrderStopLoss()<Bid-Point*TrailingStop)
{
OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
ritorno(0);
}
}
}
}
else // Lo stesso con la posizione corta
{
// dovrebbe essere chiuso?
if(iSAR(NULL,0,SAR_Step,SAR_MaxStep,GeneralShift)>Close[0])//chiude SELL
{
OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // chiudere la posizione
return(0); // uscire
}
// controlla il trailing stop
se(TrailingStop>0)
{
se((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
ritorno(0);
}
}
}
}
}
}
}
ritorno(0);
//--------
}
//-------- la fine.
Un autotrader principiante non può prendere un insetto!!! PER FAVORE AIUTATEMI!!!!!!!!!!!!!!!!!!
'}' - parentesi sbilanciate C:\Program Files (x86)\Forex4you MetaTrader 4\experts\Saurentios V101.mq4 (167, 1)