[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 279

 
drknn:
E se ha un codice per 70 sterline invece di 60? :) ;)
Conserviamolo per un aggiornamento :)
 
veti-k:
Ciao, puoi dirmi come determinare quanti pips un ordine è in profitto?
Se hai una posizione di acquisto, devi sottrarre il prezzo di apertura dal prezzo Bid corrente. Se si tratta di una posizione di vendita, dovreste sottrarre l'attuale prezzo Ask dal prezzo di apertura.
 
paladin80:
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
 
Grazie))
 
Cari utenti del forum, potreste dirmi come mettere una variabile di iCustom in ArrayMaximum?
 
Alexandr24:
Cari utenti del forum, potreste per favore consigliarmi come mettere una variabile di iCustom in ArrayMaximum?
Per questo dovete 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 più grande con ArrayMaximum.
 
granit77:
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.
Come trovare il valore massimo dell'indicatore per ieri? Ho trovato il primo e il valore massimo dell'indicatore del giorno di ieri, ma non riesco a trovare il valore massimo del giorno di ieri, ArrayMaximum inizia a cercare attraverso tutto il grafico, o forse è fatto attraverso un'altra funzione?
 

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)

 
Vorrei non aver battuto la testa mentre formattavo il codice in questo modo. Lo sistemerò :)