Come codificare? - pagina 257

 

Controlla le funzioni temporali nella guida di Metatrader. poi prova qualcosa come questo

se (TimeHour(Time[0]) TradeHourStop)

{

Comment("Trading sospeso - fuori dall'orario di trading");

return(false);

}

dove TimeHourStart e stop sono variabili esterne impostate da voi. Il return(false); farà uscire la funzione start senza ulteriori elaborazioni.

Buona fortuna,

 

Grazie per la rapida risposta, Tzuman.

Purtroppo, la mia programmazione MT4 è limitata a un costruttore di EA online al momento.

Questo è proprio quello che stavo cercando però!

 

Come codificare la configurazione del colore del testo e la dimensione del carattere dei commenti...

Ciao a tutti,

Sto lavorando su un EA e sono solo un programmatore principiante...

E ho una domanda in generale come codificare la dimensione del carattere e il colore del testo dei commenti e renderlo configurabile dall'utente. Quali variabili esterne devo creare? E come lo programmo?

So come usare la funzione di commento, per esempio così:

if(TextOnScreen == true) Comment("Questo testo appare sullo schermo");

Ma come programmarla in modo che l'utente possa cambiare il fontsize del testo che appare sullo schermo e anche come cambiare il colore del testo cambiando l'impostazione nelle opzioni dell'EA?

Qualcuno può aiutarmi con qualche riga di codice? È molto apprezzato.

Grazie mille.

Johan

 
korthouj:
Ciao a tutti,

Sto lavorando su un EA e sono solo un programmatore principiante...

E ho una domanda in generale su come codificare la dimensione del carattere e il colore del testo dei commenti e renderlo configurabile dall'utente. Quali variabili esterne devo creare? E come lo programmo?

So come usare la funzione di commento, per esempio così:

if(TextOnScreen == true) Comment("Questo testo appare sullo schermo");

Ma come programmarla in modo che l'utente possa cambiare il fontsize del testo che appare sullo schermo e anche come cambiare il colore del testo cambiando l'impostazione nelle opzioni dell'EA?

Qualcuno può aiutarmi con qualche riga di codice? È molto apprezzato.

Grazie mille.

Johan

Devi usare oggetti grafici come per esempio le etichette. Come fare questo - si può facilmente leggere nel manuale.

 
korthouj:
Ciao a tutti,

Sto lavorando su un EA e sono solo un programmatore principiante...

E ho una domanda in generale su come codificare la dimensione del carattere e il colore del testo dei commenti e renderlo configurabile dall'utente. Quali variabili esterne devo creare? E come lo programmo?

So come usare la funzione di commento, per esempio così:

if(TextOnScreen == true) Comment("Questo testo appare sullo schermo");

Ma come programmarla in modo che l'utente possa cambiare il fontsize del testo che appare sullo schermo e anche come cambiare il colore del testo cambiando l'impostazione nelle opzioni dell'EA?

Qualcuno può aiutarmi con qualche riga di codice? È molto apprezzato.

Grazie mille.

Johan

Johan,

Studia l'indicatore allegato.

Parte del codice è per quando viene usato un template.

L'ho scoperto nel modo più difficile quando il testo di una coppia è apparso su un altro grafico a causa del template.

Se sono necessarie più linee di testo dovresti essere in grado di capirlo.

In caso contrario, scrivi di nuovo e ti mostrerò un esempio con più linee.

Robert

 

perché l'ordine di chiusura fallisce e come limitare l'ordine n.o.?

Sono un principiante in MQL4, ho appena testato un mio EA, ma sembra che non possa chiudere l'ordine, e aprirebbe l'ordine in ogni barra fino a quando il freemargin non diventa 0, poi obbligherebbe a fermare tutti gli ordini. Non so come limitare l'ordine aperto NO. Chi potrebbe dirmi, TKS apprezzando!

il codice come segue:

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

//| Media mobile.mq4 |

//| Copyright ?2005, MetaQuotes Software Corp. |

//| TeamWox Groupware / MetaQuotes Software Corp. |

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

#define MAGICMA 20110309

extern double Lots = 1;

extern double MaximumRisk = 0.02;

extern double DecreaseFactor = 10;

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

//| Calcolare le posizioni aperte |

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

int CalcolaOrdiniCorrenti(simbolo stringa)

{

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(sells);

}

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

//| Calcola la dimensione ottimale del lotto

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

doppio LottiOttimizzati()

{

double lot=Lots;

int orders=HistoryTotal(); // totale degli ordini storici

int losses=0; // numero di ordini in perdita senza pausa

//---- selezionare la dimensione del lotto

lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/100.0,1);

Print(MarketInfo(Symbol(), MODE_LOTSIZE));

Print(MarketInfo(Symbol(), MODE_MINLOT));

Print(MarketInfo(Symbol(), MODE_LOTSTEP));

Print(MarketInfo(Symbol(), MODE_MAXLOT));

//---- calcolare il numero di ordini di perdite senza una pausa

if(FattoreRiduzione>0)

{

for(int i=ordini-1;i>=0;i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Errore nella storia!"); break; }

if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL) continua;

//----

se(OrderProfit()>0) break;

se(OrderProfit()<0) perdite++;

}

if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);

//questo è un disegno tecnico intelligente, ma le perdite rappresentano la perdita di profitto, non il denaro può causare problemi.

//modificate come segue: accountfreemargin()-orderprofit()

}

//---- restituisce la dimensione del lotto

if(lot<1) lot=1;

return(lot);

}

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

//|Controlla le condizioni di ordine aperto

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

void CheckForOpen()

{

double m1,m2,m3,m4,ticket1,ticket2;

int res;

//---- fare trading solo per i primi tik della nuova barra

if(Volume[0]>1) return;

//---- ottenere la media mobile

m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0);

m2=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,0);

m3=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1);

m4=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,1);

//---- condizioni di vendita

se (m1<m3-0.0002)

{

ticket1=OrderSend(Symbol(),OP_SELL,1,Bid,5,Ask+105*Point,0, "My order #1",MAGICMA,0,Red);

ritorno;

}

se (m2<m4-0.0001)

{

ticket2=OrderSend(Symbol(),OP_SELL,1,Bid,5,Ask+105*Point,0, "Il mio ordine #2",MAGICMA,0,Giallo);

ritorno;

}

//---- condizioni di acquisto

se ( m1>m3+0,0002)

{

ticket1=OrderSend(Symbol(),OP_BUY,1,Ask,5,Bid-105*Point,0, "My order #1",MAGICMA,0,Blue);

ritorno;

}

se (m2>m4+0,0001)

{

ticket2=OrderSend(Symbol(),OP_BUY,1,Ask,5,Bid-105*Point,0, "Il mio ordine #2",MAGICMA,0,Verde);

ritorno;

}

//----

}

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

//| Controlla le condizioni di chiusura dell'ordine |

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

void CheckForClose()

{

doppio m1,m2,m3,m4;

//---- fare trading solo per i primi tik della nuova barra

if(Volume[0]>1) return;

//---- ottenere la media mobile

m1=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,0);

m2=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,0);

m3=iMA(NULL,0,21,0,MODE_SMA,PRICE_CLOSE,1);

m4=iMA(NULL,0,55,0,MODE_SMA,PRICE_CLOSE,1);

//----

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

{

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

if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continua;

//---- controllare il tipo di ordine

if(OrderType()==OP_BUY)

{

if(m1<m3+0,0002)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet);

break;

}

se(m2<m4+0,0001)

{

OrderClose(OrderTicket(),OrderLots(),Bid,3,White);

break;

}

}

if(OrderType()==OP_SELL)

{

if(m1>m3-0.0002)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Tan);

break;

}

se(m2<m4-0.0001)

{

OrderClose(OrderTicket(),OrderLots(),Ask,3,Salmon);

break;

}

}

}

//----

}

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

//| Funzione di avvio |

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

void start()

{

//---- controlla la storia e il trading

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

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

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

else CheckForClose();

//----

}

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

 

Rilevare la versione di Windows

C'è qualcuno che conosce un modo semplice per scoprire quale versione di windows MT4 è in esecuzione usando solo una chiamata API di windows.

Qualcuno può dirmi come far funzionare questo:

#importare "kernel32.dll"

int GWINAPI GetVersionEA(_inout LPOSVERSIONINFO lpVersionInfo);

#importare

Funzione GetVersionEx (Windows)

Grazie

 

Aiuto necessario. Piccolo aggiustamento al mio CCI Divergence EA

Ho un CCI Divergence EA che usa un indicatore CCI Divergence personalizzato nella cartella Indicatori in MT4 per determinare quando piazzare un trade.

Quello che voglio fare è usare un indicatore Stocastico Divergenza personalizzato (che ho) invece.

Non so come cambiare il codice EA per indirizzarlo all'indicatore Stocastico Divergenza nella cartella degli indicatori.

Negli input dell'EA penso di dover sostituire

extern int CCI_Period = 10;

con

extern int Stoch_K = 5;

extern int Stoch_D = 3;

extern int Stoch_Slowing = 3;

Nella parte principale del codice ho trovato l'area che punta all'indicatore personalizzato CCI Divergence nella cartella Indicators:

dUp = iCustom(Symbol(), 0, "CCI_Divergence_Indicator", "", CCI_Period, 9, "", false, false, false, 0, 2);

dDn = iCustom(Symbol(), 0, "CCI_Divergence_Indicator", "", CCI_Period, 9, "", falso, falso, falso, 1, 2);

So che devo cambiare "CCI_Divergence_Indicator" in "Stochastics_Divergence_Indicator" che è il nome dell'indicatore di divergenza stocastica personalizzato nella cartella Indicators. E devo rimuovere il CCI_Period e il 9.

Ma non so come aggiungere lo Stoch_K, Stoch_D e Stoch_Slowing a questa parte del codice.

Ho provato a cambiarlo da solo, ma poi l'EA non si apre.

Qualcuno sa come codificare questa porzione di codice in modo che l'indicatore di divergenza stocastica possa sostituire l'indicatore di divergenza cci?

Ho pagato un programmatore per creare l'ea, ma è molto occupato con altri progetti di clienti. Quindi, quando si tratta di modifiche/correzioni minori, non ha il tempo di farlo per me, almeno non subito. Ecco perché sto chiedendo qui.

L'indicatore CCI Divergence ha troppi falsi segnali. L'indicatore Stocastico Divergenza è molto meglio. Questo è il motivo per cui voglio fare il cambio.

Grazie in anticipo.

 

Aiuto per favore

Ho una linea di codice che mi avviserà quando il prezzo di 1 barra (sia esso 1m 5m 189m) si muove 200 pips IN 1 BAR. ma non posso per la vita di me capire come impostare per avvisare SOLO direzione specifica. qui è.

if(High[0]-Low[0]>200*Point)PlaySound("Alert.wav"); //Questo funziona bene.

Ma voglio essere in grado di distinguere tra un 200 pip UP e 200 pip DOWN. Ho letto, chiesto nei forum, sono stato nelle chat room, e mi sono fatto impazzire per 3 giorni.

 
if(High[0]-Low[0]>200*Point && Close[0]>Open[0])PlaySound("Up.wav");

if(High[0]-Low[0]>200*Point && Close[0]<Open[0])PlaySound("Down.wav");[/CODE]

Actually, you should rather look at highs and lows of two last bars and compare close to close, to ensure gaps are included, too:

[CODE]if(Mathmax(High[0],High[1])-Mathmin(Low[0],Low[1])>200*Point && Close[0]>Close[1])PlaySound("Up.wav");

if(Mathmax(High[0],High[1])-Mathmin(Low[0],Low[1])>200*Point && Close[0]<Close[1])PlaySound("Down.wav");
Motivazione: