Come codificare? - pagina 182

 

...

Non è un errore nel codice

Vai su Strumenti->Centro Storico e poi scegli e scarica i dati di 1 minuto dal simbolo che vuoi testare (tutto ciò di cui hai bisogno per una precisione del 90% sono i dati di 1 minuto, non c'è bisogno di scaricare il resto)

Badguy:
Ciao Coders

Sto ancora imparando i miei primi passi in MQL-Code.

Qual è la ragione quando ho il seguente messaggio nel diario:

Testgenerator:

unmatched data error ( limite di volume 159 al 2009.05.06 19 15 superato )

dove devo guardare nel codice?

Grazie
 
abundance:
Io e il mio amico stiamo lavorando su un EA. Ad un certo punto (l'EA) ha bisogno di leggere e recuperare il prezzo ad una certa ora, diciamo, 17:00 EST... ecc.

Qualche senior può consigliarmi come fare, invece di contare le barre di prezzo all'indietro? Forse c'è già una funzione scritta per questo. Gentilmente aiutatemi. Grazie a tutti e Dio vi benedica!

B rgds/abbondanza

iBarShift(..) aiuta a trovare il numero di barre sul tuo grafico, poi usa Close o Open.

 
Roger09:
iBarShift(..) aiuta a trovare il numero di barre sul vostro grafico, poi usate Close o Open.

Grazie Roger. È stato utile. E scusa se non sono stato più chiaro. Abbiamo bisogno di entrambi i prezzi Bid & Ask. Come possiamo ottenerli? Pl scusa se è una domanda stupida

B rgds/abbondanza

 

Errore di dati

Ciao mladen

grazie per la tua risposta veloce.

Penso che non sia un problema di tickdata, perché quando provo con un altro EA funziona bene.

Penso che sia un problema con il Custom-Indicator.

Lo costruirò nel seguente indi: Tutte le medie_v2.3

double ALL_AVERAGES_0 = iCustom(NULL,ALL_AVERA_TF, "AllAverages_v2.3",ALL_AVERA_PERIOD,ALL_AVERA_SHIFT,ALL_AVERA_METHOD,ALL_AVERA_PRICE,0);

ora ho il seguente messaggio: numero di buffer di indice non valido nella funzione iCustom

Come definire correttamente questo iCustom?

Ciao mladen ho trovato il problema

Ho dimenticato un parametro: Colore

la definizione corretta:

double ALL_AVERAGES_0 = iCustom(NULL,ALL_AVERA_TF, "AllAverages_v2.3",ALL_AVERA_PERIOD,ALL_AVERA_SHIFT,ALL_AVERA_METHOD,ALL_AVERA_PRICE,ALL_AVERA_COLOR,0);

mladen:
Non è un errore nel codice Vai a Strumenti->Centro storico e poi scegli e scarica i dati di 1 minuto dal simbolo che vuoi testare (tutto ciò di cui hai bisogno per una precisione del 90% sono i dati di 1 minuto, non c'è bisogno di scaricare il resto)
File:
 
abundance:
Grazie Roger. Questo è stato utile. E scusa se non sono stato più chiaro. Abbiamo bisogno di entrambi i prezzi Bid e Ask. Come possiamo ottenerli? Pl scusa se è una domanda stupida B rgds/abundance

Tutti i prezzi sui grafici sono Bid. Ask=Bid+MarketInfo(Symbol(),MODE_SPREAD)*Point;

 

Limitare i trade

Così ho iniziato a scrivere un EA di base con uno di quei costruttori di EA che generano template. Sembra che io abbia ottenuto la premessa del modello EA, tuttavia ho bisogno di un modo per far sì che l'EA inserisca solo un trade al massimo. In questo momento continua a generare trade e fa sì che il draw down sia ridicolo. Ecco il codice del lotto di trade:

//Controlla la posizione

bool IsTrade = False;

for (int i = 0; i < Totale; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

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

IsTrade = True;

if(OrderType() == OP_BUY) {

//Chiudere

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

//| Segnale Inizio(Esci Compra) |

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

if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;

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

//| Segnale Fine(Esci dall'Acquisto) |

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = Falso;

continuare;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

if(Bid - OrderOpenPrice() > Punto * TrailingStop) {

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

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continua;

}

}

}

} else {

//Chiudi

Se qualcuno può aiutare, sarebbe molto apprezzato.

 
Styex:
Così ho iniziato a scrivere un EA di base con uno di quei costruttori di EA che generano template. Sembra che io abbia ottenuto la premessa del modello EA, tuttavia ho bisogno di un modo per fare in modo che l'EA inserisca un solo trade al massimo. In questo momento continua a generare trade e fa sì che il draw down sia ridicolo. Se qualcuno potesse aiutarmi, sarebbe molto apprezzato.
if (OrdersTotal() == 0)

{

//Check position

bool IsTrade = False;

for (int i = 0; i < Total; i ++) {

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

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

IsTrade = True;

if(OrderType() == OP_BUY) {

//Close

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

//| Signal Begin(Exit Buy) |

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

if (CloseBuy1_1 >= CloseBuy1_2) Order = SIGNAL_CLOSEBUY;

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

//| Signal End(Exit Buy) |

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

if (Order == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy");

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

continue;

}

//Trailing stop

if(UseTrailingStop && TrailingStop > 0) {

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

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

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen);

if (!EachTickMode) BarCount = Bars;

continue;

}

}

}

} else {

//Close

}
 

Grazie OnTheRoad

Ho trovato questo EA, ma non ne capisco alcune.

bool get_signal()

{

bool enable_trade = false;

int trend_up = 0;

int trend_down = 0;

int i;

ArrayInitialize( TradeSign, false );

if( Bars >= 100 ){

for( i = 0 ; i < DEF_MA_NUM ; i++ ){

Buf_MA[0][ i ] = calc_SMA( PERIOD_M30, MA_prm_1, i );

Buf_MA[1][ i ] = calc_SMA( PERIODO_M30, MA_prm_2, i );

Buf_MA[2][ i ] = calc_SMA( PERIODO_M30, MA_prm_3, i );

Buf_MA[3][ i ] = calc_SMA( PERIODO_M30, MA_prm_4, i );

Buf_MA[4][ i ] = calc_SMA( PERIOD_M30, MA_prm_5, i );

}

double vRSI = iRSI( Symbol(), PERIOD_M5, RSI_period5, PRICE_CLOSE, 0 );

double vRSI2 = iRSI( Symbol(), PERIOD_M1, RSI_period1, PRICE_CLOSE, 0 );

for( i = 0 ; i < DEF_MA_TYP ; i++ ){

if((Buf_MA[2] < Buf_MA[1]) && (Buf_MA[1] < Buf_MA[0])){

trend_up++;

}

}

if((trend_up > 3) && (vRSI <= RSI_lower) && (vRSI2 <= RSI_lower)){

TradeSign[SIG_Buy] = true;

enable_trade = true;

}

for( i = 0 ; i < DEF_MA_TYP ; i++ ){

if((Buf_MA[2] > Buf_MA[1]) && (Buf_MA[1] > Buf_MA[0])){

trend_down++;

}

}

if((trend_down > 3) && (vRSI >= RSI_upper) && (vRSI2 >= RSI_upper)){

TradeSign[SIG_Sell] = true;

enable_trade = true;

}

}

return(enable_trade);

}

double calc_SMA( int timeframe, int period, int offset )

{

double vMA = 0;

double sum=0;

int i;

for( i = 0 ; i < periodo ; i++ ){

sum += iClose( Symbol(), timeframe, i + offset );

}

vMA = somma / periodo;

return(vMA);

}

c'è una parte dove "trendup>3", questo è calcolato da un array? Come funziona un array che può dare "trendup>3"? È per conoscere la media di una singola linea (quella linea è probabile che vada su o giù)? Non capisco come funziona.
File:
 

Come resettare gli esperti quando si raggiunge il profitto target? Sto usando la strategia martingala ma non apre i lotti in sequenza...

esempio: lotti 0.1, 0.2, 0.4, 0.8, 1.6

lotti aperti: 0.1, 0.2, 0.4 -> prendo profitto al lotto 0.4 ma il prossimo lotto è 0.8, 0.1, 0.2, 0.4...

qualcuno può aiutarmi?

int T=0;

for(int i=0;i<OrdersTotal();i++) {

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if(OrderSymbol()==Symbol() && OrderComment()==Name_ExpertS)

{ T++;

if(OrderType()==OP_BUY) s=1;

if(OrderType()==OP_SELL) s=2;

Last=OrderOpenPrice();

}}

if (Lots<0.1) Lots=0.1;

for (int j=0;j<T;j++)

{

Lots=LotsUP[j];

}
 

Alto/Basso con criteri

Sto cercando di codificare un indicatore che cerca cose specifiche prima di dichiarare che una candela è il vero massimo o il vero minimo. Questi sono fondamentalmente i criteri (ho allegato un grafico per aiutare a spiegare):

1. 1. Cercare una chiusura che sia inferiore a tutte le 20 chiusure precedenti (la seconda freccia è questo punto), poi (2) 12 barre dopo la chiusura deve essere superiore alle 12 chiusure precedenti (la terza freccia). Questa tendenza al rialzo continuerà fino a quando (3) ci sarà una chiusura più bassa delle 7 chiusure precedenti (la quarta freccia).

Ho provato ad usare la funzione iLowest senza molto successo. Penso che la mia scommessa migliore sia quella di usare un array, ma la mia conoscenza degli array è limitata.

Qualche idea o esempio su come usare ArrayMinimum e ArrayMaximum? O se c'è un modo per far funzionare iLowest e iHighest?

File:
Motivazione: