Aiuto per la codifica - pagina 19

 

Ho completato il mio EA con il tuo aiuto.

Ciao, mLaden,

Grazie ancora per il tuo grande aiuto

Ho completato il mio EA con il tuo aiuto.

Grazie

 

Riverniciare gli indicatori

Ho postato questa domanda in questo thread 'Coding Help' un paio di settimane fa, ma non ho avuto risposta.

La maggior parte degli indicatori MTF si ridipingono, alcuni più di altri. Ne ho uno che ridipinge leggermente, ma ha un fattore che è molto buono e potrebbe essere incluso in un metodo. Il problema è che ho bisogno di aggiornare/aggiornare manualmente costantemente perché abbia senso. C'è un modo per codificare un aggiornamento automatico ogni tick o ogni 'x' secondi/ticks?

Attualmente, per aggiornare, o cambio i tempi del grafico e poi torno indietro, o vado nella scheda Charts/Refresh, o aggiungo un altro indicatore al grafico e cancello quello precedente.......di nuovo! Molto dispendioso in termini di tempo!

Se c'è un modo per fare questo aggiornamento automatico, condividerò quello che ho trovato............

Grazie,

el bee

 

...

el ape

Metatrader invia un segnale di autorefresh ad ogni indicatore nella finestra quando arriva un nuovo tick, quindi non è un problema di refresh. Di solito quel tipo di problema che hai si verifica quando un indicatore non trova il conteggio delle barre cambiate (di solito chiamato negli indicatori come "limite") correttamente ... quindi è un problema dell'indicatore. Quando cambiate time frame ricalcola di nuovo tutte le barre ed è per questo che lo mostra correttamente in quel caso e non lo fa correttamente quando è cambiato solo il valore di 1 barra

Per concludere: controllate il codice dell'indicatore - c'è un bug in esso

el bee:
Ho postato questa domanda in questo thread 'Coding Help' un paio di settimane fa, ma non ho avuto risposta.

La maggior parte degli indicatori MTF si ridipingono, alcuni più di altri. Io ne ho uno che ridipinge leggermente, ma ha un fattore che è molto buono e potrebbe essere incluso in un metodo. Il problema è che ho bisogno di aggiornare/aggiornare manualmente costantemente perché abbia senso. C'è un modo per codificare un aggiornamento automatico ogni tick o ogni 'x' secondi/ticks?

Attualmente, per aggiornare, o cambio i tempi del grafico e poi torno indietro, o vado nella scheda Charts/Refresh, o aggiungo un altro indicatore al grafico e cancello quello precedente.......di nuovo! Molto dispendioso in termini di tempo!

Se c'è un modo per fare questo aggiornamento automatico, condividerò quello che ho trovato............

Grazie,

el bee
 

aiuto indicatore

Potrei usare un indicatore che metta una linea verticale sulla candela più recente, regolabile, se qualcuno ne ha uno e può condividerlo o se uno può essere fatto, sarebbe molto apprezzato

 

C'è un codice sbagliato?

Sto cercando di scrivere un EA che si basa su apertura e chiusura della barra

ma ho un problema sulla condizione per aprire un trade.

Il mio metodo è qualcosa del genere:

+ VENDERE quando l'apertura della barra corrente è superiore alla chiusura della barra precedente. Il TP è la chiusura della barra precedente

+ COMPRA quando l'apertura della barra attuale è inferiore all'apertura della barra precedente. TP è l'apertura della barra precedente

+ CLOSE quando la chiusura della barra corrente è inferiore alla chiusura della barra precedente.

ed ecco il codice (sto ancora cercando di imparare mql4, quindi so che non è il miglior codice)

#property link "sando"

#define MAGICMA 20050610

//====================parameter===================//

extern double solantang =3;

extern double solangiam =3;;

extern double LotsSize =1;

//==============================================//

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

//| controllare se ci sono scambi aperti

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

int CalculateCurrentOrders(string symbol)

{

int buys=0,sells=0;

//----

for(int i=0;i<OrdiniTotali();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==falso) break;

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)

{

if(OrderType()==OP_BUY) compra++;

if(OrderType()==OP_SELL) sells++;

}

}

//---- restituisce il volume degli ordini

if(buys>0) return(buys);

altrimenti return(-vendite);

}

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

//| Moneymanagement (Tipo 3) |

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

doppio moneymanagement3()

{

double LotsSize = 0.1;

se(OrdiniStoriaTotale()>0)

{

OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);

if(OrderProfit() > 0)

{

se(OrderLots() > LotsSize)

{

LotsSize = OrderLots()/solangiam;

}

else

{

LotsSize = LotsSize;

}

}

else

{

LotsSize = OrderLots() * solantang;

}

}

return (NormalizeDouble(LotsSize,2));

}

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

//| CONDIZIONE per aprire una negoziazione

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

void opentrade()

{

int res;

if(Close[0]<Open[1])

{

res=OrderSend(Symbol(),OP_SELL,moneymanagement3(),Bid,3,Close[0],Close[1],"",MAGICMA,0,Red);

ritorno;

}

se(Open[0]>Open[1])

{

res=OrderSend(Symbol(),OP_BUY,moneymanagement3(),Ask,3,Open[0],Close[1],"",MAGICMA,0,Blu);

ritorno;

}

}

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

//| funzione di avvio esperto |

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

void start()

{

//---- controlla la cronologia e il trading

if(Bars<100 || IsTradeAllowed()==false) return;

//---- calcola gli ordini aperti in base al simbolo corrente

if(CalculateCurrentOrders(Symbol())==0) opentrade();

// else donggiaodich();

//----

}

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

e si prega di controllare l'immagine in allegato

Penso che ci sia qualcosa di sbagliato nel codice

a volte l'EA non esegue il trade quando soddisfa la condizione T_T non so perché

e a volte l'EA esegue il trade quando non soddisfa la condizione!

Per favore aiutatemi a risolvere il problema nel codice.

File:
1_2.gif  12 kb
new_edge.mq4  4 kb
 
7thman:
Sto cercando di scrivere un EA che si basi su apertura e chiusura della barra

ma ho un problema sulla condizione per aprire un trade.

Il mio metodo è qualcosa del genere:

+ VENDERE quando l'apertura della barra corrente è superiore alla chiusura della barra precedente. Il TP è la chiusura della barra precedente

+ COMPRA quando l'apertura della barra attuale è inferiore all'apertura della barra precedente. TP è l'apertura della barra precedente

+ CLOSE quando la chiusura della barra attuale.

ed ecco il codice (sto ancora cercando di imparare mql4, quindi so che non è il miglior codice)

e si prega di controllare l'immagine in allegato

Penso che ci sia qualcosa di sbagliato nel codice

a volte l'EA non esegue il trade quando soddisfa la condizione T_T non so perché

e a volte l'EA esegue il trade quando non soddisfa la condizione!

Per favore aiutatemi a correggere l'errore nel codice.

[lang=pl]+ SELL quando l'apertura della barra corrente è superiore alla chiusura della barra precedente. Il TP è la chiusura della barra precedente

+ COMPRA quando l'apertura della barra attuale è inferiore all'apertura della barra precedente. TP è l'apertura della barra precedente

Ecco il primo errore:

if(Close[0]Close[1])

if(Open[0]>Open[1]) (Dovrebbe essere Open[0]<Open[1])

Il secondo è StopLoss. Nel vostro codice avete impostato StopLose, ma nella descrizione sopra

hai detto che vuoi chiudere i trade se una nuova barra si alza.

Ecco un altro problema. Supponiamo che Open[0]<Open[1]. La differenza può essere così piccola

che quando il tuo ordine verrà eseguito il prezzo sarà superiore a Open[1] e il TP sarà

meno del prezzo di apertura dell 'ordine. Sotto ho aggiunto una condizione che permette di catturare questo caso.

Se ho capito bene che vuoi chiudere tutti gli ordini alla fine della barra, ecco il codice.

#proprietà link "sando"

#define MAGICMA 20050610

//====================parameter===================//

extern double solantang =3;

extern double solangiam =3;;

extern double LotsSize =1;

//==============================================//

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

//| controllare se ci sono scambi aperti

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

int CalculateCurrentOrders(string symbol)

{

int buys=0,sells=0;

//----

for(int i=0;i<OrdiniTotali();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false ) break;

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)

{

if(OrderType()==OP_BUY) compra++;

if(OrderType()==OP_SELL) sells++;

}

}

//---- restituisce il volume degli ordini

if(buys>0) return(buys);

altrimenti return(-vendite);

}

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

//| Moneymanagement (Tipo 3) |

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

doppio moneymanagement3()

{

double LotsSize = 0.1;

se(OrdiniStoriaTotale()>0)

{

OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);

if(OrderProfit() > 0)

{

se(OrderLots() > LotsSize)

{

LotsSize = OrderLots()/solangiam;

}

else

{

LotsSize = LotsSize;

}

}

else

{

LotsSize = OrderLots() * solantang;

}

}

return (NormalizeDouble(LotsSize,2));

}

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

//| CONDIZIONE per aprire una negoziazione

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

void opentrade()

{

int res;

if(Close[1] Close[1] )

{

res=OrderSend(Symbol(),OP_SELL,moneymanagement3(), Bid,3,0,Close[1],"",MAGICMA,0,Red);

return;

}

if(Open[0]<Open[1] && Ask < Open[1])

{

res=OrderSend(Symbol(),OP_BUY,moneymanagement3(),Ask,3,0,Open[1],"",MAGICMA,0,Blu);

ritorno;

}

}

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

//| funzione di avvio esperto |

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

void start()

{

if(isNewBar())

{

closeOrders(MAGICMA,OP_BUY);

closeOrders(MAGICMA,OP_SELL);

}

Print(Close[1]-Open[0]);

//---- controllare la storia e il trading

if(Bars<100 || IsTradeAllowed()==false) return;

//---- calcolare gli ordini aperti in base al simbolo corrente

if(CalculateCurrentOrders(Symbol())==0) opentrade();

// else donggiaodich();

//----

}

void closeOrders(int oMagic,int oType) {

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

if(OrderSelect(i,SELECT_BY_POS)) {

if(OrderMagicNumber()==oMagic || oMagic<0) {

if(OrderSymbol()==Symbol()) {

if(OrderType()==oType || oType<0) {

if(OrderType()==OP_BUY) {

OrderClose(OrderTicket(),OrderLots(),Bid,0);

i--;

}

se (OrderType() == OP_BUYSTOP)

{

OrderDelete(OrderTicket());

i--;

}

se (OrderType()==OP_SELL) {

OrderClose(OrderTicket(),OrderLots(),Ask,0);

i--;

}

se (OrderType() == OP_SELLSTOP)

{

OrderDelete(OrderTicket());

i--;

}

}

}

}

}

}

}

bool isNewBar() {

static int prevTime;

bool newBar=false;

if(Time[0]!=prevTime) {

newBar=true;

prevTime=Time[0];

}

return(newBar);

}

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

Salute,

Grzesiek[/lang]

 

Aiuto per la codifica: Piazzare Stop Loss & Take Profit con EA usando un broker ECN

Stop Loss, Take Profit con broker ECN

Amici,

Sono un principiante della programmazione MQL4 e ho bisogno di aiuto per collegare uno SL e un TP ad un ORDERSEND con un broker ECN.

Inizialmente non riuscivo a capire perché gli SL & TP facessero risultare il mio ordine in un errore, finché qualcuno non mi ha fatto notare che bisogna impostare il campo StopLoss & TakeProfit all'interno dell'ORDERSEND a "0", altrimenti un broker ECN/STP non eseguirà l'ordine.

Quindi, la mia domanda è: come posso eseguire un ordine a mercato e poi immediatamente (o entro uno o due secondi) allegare uno SL/TP a quel ticket?

Ecco un pezzo di codice pertinente alla mia domanda:

if(CurrentPriceBuy>UpperPriceTrigger)

{

OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,0,Co mm,0,0,0,CLR_NONE);

}

Qualcuno può aiutarmi a inserire del codice subito dopo il comando OrderSend in modo che io possa attaccare un TP/SL di diciamo arbitrariamente 25pips a quello specifico ticket?

Qualsiasi aiuto sarebbe molto apprezzato. Grazie in anticipo.

Cordiali saluti,

Kasio

 
kasio:
Stop Loss, Take Profit con broker ECN

Amici,

Sono un principiante della programmazione MQL4 e ho bisogno di aiuto per collegare un SL & TP a un ORDERSEND con un broker ECN.

Inizialmente, non riuscivo a capire perché gli SL & TP facessero risultare il mio ordine in un errore fino a quando qualcuno mi ha fatto notare che bisogna impostare il campo StopLoss & TakeProfit all'interno dell'ORDERSEND a "0", altrimenti un broker ECN/STP non eseguirà l'ordine.

Quindi, la mia domanda è: come posso eseguire un ordine a mercato e poi immediatamente (o entro uno o due secondi) allegare uno SL/TP a quel ticket?

Ecco un pezzo di codice pertinente alla mia domanda:

if(CurrentPriceBuy>UpperPriceTrigger)

{

OrderSend(Sym,OP_BUY,Lots,CurrentPriceBuy,0,0,0,Co mm,0,0,0,CLR_NONE);

}

Qualcuno può aiutarmi a inserire del codice subito dopo il comando OrderSend in modo che io possa attaccare un TP/SL di diciamo arbitrariamente 25pips a quello specifico ticket?

Qualsiasi aiuto sarebbe molto apprezzato. Grazie in anticipo.

Cordiali saluti,

Kasio

Ciao Kasio,

Se fai trading in un broker ECN dovresti inviare l'ordine senza SL/TP e modificarlo.

Ecco un esempio:

extern double StopLoss = 25;

extern double TakeProfit = 25;

if(isECN==true )

{

ticket=OrderSend(Symbol(),OP_BUY,lots,Ask, slippage,0,0,comment,magic);

OrderSelect(ticket,SELECT_BY_TICKET);

OrderModify(ticket,OrderOpenPrice(),sltpValue(Bid - StopLoss*Point, StopLoss),sltpValue(Ask+ TakeProfit*Point,TakeProfit),0);

}

double sltpValue(double w1, int w2)

{

se(w2 == 0)

ritorna (0);

return (NormalizeDouble(w1, Digits));

}

Spero che sia chiaro

PM me se hanno più domande.

grazie,

grzesiek

 

Informazioni non aggiornate ogni tic

Ciao Ragazzi,

Ho scritto questo ea che mi mostra informazioni su vari indicatori sul mio schermo.

Tuttavia quando collego l'ea al mio grafico, le informazioni vengono aggiornate solo ogni 5 min (su grafico 5 min.),

invece di ogni tic. C'è qualcosa di sbagliato nel mio codice? Vorrei che le informazioni cambiassero ogni tic.

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

//| test.mq4 |

//| Copyright © 2011, Test Inc. |

//| test.net - Risorse e informazioni di test. |

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

#property copyright "Copyright © 2011, Test Inc."

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

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

//| etichette |

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

#define ccilabel "CCIValue"

#define rsilabel "RSIValue"

#define stochlabel "StochValue"

#define upperbandlabel "UpperBandValue"

#define lowerbandlabel "LowerBandValue"

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

//| funzione di inizializzazione dell'esperto

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

int init()

{

//----

//----

return(0);

}

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

//| funzione di deinizializzazione esperto |

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

int deinit()

{

//----

//----

return(0);

}

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

//| funzione di avvio esperto |

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

int start()

{

//----

//===================================================================

// Indice di forza relativa dinamico berekenen

//===================================================================

doppio RSI;

doppio UpperBand

doppio Banda Inferiore;

RSI=iCustom(NULL,0, "Dynamic Zone RSI",14,0,1);

UpperBand=iCustom(NULL,0, "Dynamic Zone RSI",14,1,1);

LowerBand=iCustom(NULL,0, "Dynamic Zone RSI",14,2,1);

//===================================================================

// CCI berekenen

//===================================================================

doppio CCI;

CCI=iCCI(NULL,0,14,PRICE_TYPICAL,1);

//===================================================================

// Stocastico

//===================================================================

doppio Stoch;

Stoch=iStochastic(NULL,0,5,3,3,MODE_SMA,0,MODE_MAIN,1);

//===================================================================

// Visualizza informazioni

//===================================================================

// CCIValue

ObjectDelete(ccilabel);

ObjectCreate(ccilabel, OBJ_LABEL, 0, 0, 0);

ObjectSet(ccilabel, OBJPROP_XDISTANCE, 20);

ObjectSet(ccilabel, OBJPROP_YDISTANCE, 20);

ObjectSetText(ccilabel, "CCIValue è " + DoubleToStr(CCI,2), 10, "Arial", DeepSkyBlue);

// StochValue

ObjectDelete(stochlabel);

ObjectCreate(stochlabel, OBJ_LABEL, 0, 0, 0);

ObjectSet(stochlabel, OBJPROP_XDISTANCE, 20);

ObjectSet(stochlabel, OBJPROP_YDISTANCE, 40);

ObjectSetText(stochlabel, "StochValue is " + DoubleToStr(Stoch,2), 10, "Arial", DeepSkyBlue);

// RSIValue

ObjectDelete(rsilabel);

ObjectCreate(rsilabel, OBJ_LABEL, 0, 0, 0);

ObjectSet(rsilabel, OBJPROP_XDISTANCE, 20);

ObjectSet(rsilabel, OBJPROP_YDISTANCE, 60);

ObjectSetText(rsilabel, "RSIValue è " + DoubleToStr(RSI,2), 10, "Arial", DeepSkyBlue);

// UpperBandValue

ObjectDelete(upperbandlabel);

ObjectCreate(upperbandlabel, OBJ_LABEL, 0, 0, 0);

ObjectSet(upperbandlabel, OBJPROP_XDISTANCE, 20);

ObjectSet(upperbandlabel, OBJPROP_YDISTANCE, 80);

ObjectSetText(upperbandlabel, "UpperbandValue is " + DoubleToStr(UpperBand,2), 10, "Arial", DeepSkyBlue);

// LowerBandValue

ObjectDelete(lowerbandlabel);

ObjectCreate(lowerbandlabel, OBJ_LABEL, 0, 0, 0);

ObjectSet(lowerbandlabel, OBJPROP_XDISTANCE, 20);

ObjectSet(lowerbandlabel, OBJPROP_YDISTANCE, 100);

ObjectSetText(lowerbandlabel, "LowerBandValue is " + DoubleToStr(LowerBand,2), 10, "Arial", DeepSkyBlue);

//----

return(0);

}

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

 

KG Supporto e resistenza mod

Salve, ho bisogno di qualcuno che modifichi uno degli indicatori di supporto e resistenza allegati,

Ho bisogno di qualcuno che modifichi uno degli indicatori di supporto e resistenza allegati. Il primo ha un allarme quando viene effettuato un breakout. Questo indicatore è uno dei migliori indicatori di supporto/resistenza ed è anche molto potente soprattutto sui timeframe più alti.

Grazie

kg_supporto_e_resistenza.mq4 o

kg_supporto_e_resistenza_allarme_revisione_2.ex4

Motivazione: