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
Sto cercando di imparare MQ4. Il mio primo semplice programma dovrebbe far scattare un allarme quando 2 MA si incrociano. Non riesco a capire perché
questo codice non funziona.
Qualsiasi aiuto sarà molto apprezzato! Grazie in anticipo.
extern int Periodo_MA1 = 5;
extern int Periodo_MA2 = 1;
doppio MA1;
doppio MA2;
int init()
{
return(0);
}
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
int start()
{
//--------------------------------------------------------------------
MA1=iMA(NULL,0,Period_MA1,0,MODE_SMA,PRICE_CLOSE,0);
MA2=iMA(NULL,0,Period_MA2,0,MODE_SMA,PRICE_CLOSE,0);
//--------------------------------------------------------------------
se (MA2 == MA1 )
Alert("Il prezzo è lo stesso(",Periodo_MA2,").");// Alert
ritorno;
}Ciao Lincoln2012,
Potresti controllare il codice di questo Ma Cross
Sto cercando di imparare MQ4. Il mio primo semplice programma dovrebbe far scattare un allarme quando 2 MA si incrociano. Non riesco a capire perché
questo codice non funziona.
}La chiave per codificare un incrocio di 2 linee di indicatori qualsiasi è questo concetto:
1. Se la barra corrente line1>linea2, e la barra precedente line1<linea2, allora c'è un incrocio Up.
2. Se la barra corrente line1linea2, allora c'è un incrocio al ribasso.
ciao
Beh, stavo facendo un po' di programmazione in Mt4, ma non sono un professionista, solo una semplice modifica di un vecchio indicatore. Ok voglio fare un semplice indicatore ma non so come farlo.
Il suo semplice indicatore controlla semplicemente il valore se il valore di tutte le variabili è lo stesso e disegna il punto in cui il valore di tutte le variabili corrisponde.
la mia semplice soluzione
supponiamo di avere delle variabili
doppio movingavg1;
doppio movingavg12
doppio movingavg13;
doppio movingavg14;
doppio movingavg15;
doppio movingavg16;
doppio movingavg17;
doppio movingavg18
doppio movingavg19;
doppio movingavg10;
doppio movingavgall;
dichiariamo la variabile, sto solo dando un esempio, sto usando iStochastic(1), ma possiamo usare qualsiasi indicatore.
movingavg12=iStochastic(1)
movingavg13=iStochastic(2)
.
.
.
così via
ora
se (movingavg12=movingavg13=movingavg14,....) (mettere il valore nella variabile "movingavgall") //mettere il valore che è uguale per vria
disegna movingavgall sulle barre
Applicazione
supponiamo che io voglia controllare dove la media mobile 3 e la media mobile 5 hanno lo stesso valore
anche questo indicatore può essere usato con RSI dove il valore di RSI 1 e RSI 2 = 80
e molti altri
anche se aggiungiamo MTF che sarà un bonus aggiunto
sembra semplice da scrivere ma non sono riuscito a trovare la soluzione, spero che qualcuno possa aiutarmi
spero che voi capiate cosa sto dicendo
grazieUna volta che hai dei valori da confrontare useresti un codice simile al seguente.
Ilcontrollo dei valori uguali usa ==. Un singolo = è usato per assegnare un valore ad una variabile.
Il controllo di più di 1 set deve usare && per indicare AND
movingavgall = 0;
se ((a == b) && (b == c) && (c == d)) movingavgall = a;
Potete quindi controllare se movingavgall ha un valore con
se (movingavgall != 0)
{
// fai qualcosa qui
}
Fai una ricerca per la programmazione di metatrader usando Google.
Dovresti trovare diversi buoni tutorial per la programmazione in MT4.
Anche un buon libro sulla programmazione C ti aiuterà.
Robert Hill aka MrPip
semplificare questo codice
ciao a tutti!
Sto cercando di semplificare questo codice usando il comando stringconcatenate da questo:
ObjectSetText("uitog1v", StringConcatenate("/\\" ", uitog1v, "%"),12, hr1v, DodgerBlue );
a questo:
ObjectSetText("uitog1v", StringConcatenate("/\\\", uitog1v, "%","/\\", uitog2v, "%","/\\", uitog3v, "%"),12, StringConcatenate(hr1v,hr2v,hr3v), DodgerBlue );
Spero che qualcuno possa aiutarmi.
I migliori saluti
doc
trend_alexcud_v_2men.mq4
...
Doc
Se avete bisogno di tutti questi elementi, non c'è un modo più semplice di scriverlo
ciao a tutti!
Sto cercando di semplificare questo codice usando il comando stringconcatenate da questo:
ObjectSetText("uitog1v", StringConcatenate("/\\" ", uitog1v, "%"),12, hr1v, DodgerBlue );
a questo:
ObjectSetText("uitog1v", StringConcatenate("/\\\", uitog1v, "%","/\\", uitog2v, "%","/\\", uitog3v, "%"),12, StringConcatenate(hr1v,hr2v,hr3v), DodgerBlue );
Spero che qualcuno possa aiutarmi.
I migliori saluti
doc
trend_alexcud_v_2men.mq4Come fare: Allarme ogni 60 secondi
Come posso creare un codice che ad esempio mi dia un allarme ogni 60 secondi?
Ho creato questo codice qui sotto, ma mi dà un allarme ogni minuto da quando lo attacco al grafico e voglio che segua il tempo del broker in modo che mi avvisi per esempio ogni 60 secondi.
#include
#include
// exported variables
// local variables
double PipValue=1; // this variable is here to support 5-digit brokers
bool Terminated = false;
string LF = "\n"; // use this in custom or utility blocks where you need line feeds
int NDigits = 4; // used mostly for NormalizeDouble in Flex type blocks
int ObjCount = 0; // count of all objects created on the chart, allows creation of objects with unique names
int ExpectedTime2 = 0;
int init()
{
NDigits = Digits;
ObjectsDeleteAll(); // clear the chart
Comment(""); // clear the chart
}
// Expert start
int start()
{
if (Bars < 10)
{
Comment("Not enough bars");
return (0);
}
if (Terminated == true)
{
Comment("EA Terminated.");
return (0);
}
OnEveryTick1();
}
void OnEveryTick1()
{
if (true == false && true) PipValue = 10;
if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
OncePerMinutes2();
}
void OncePerMinutes2()
{
int datetime800 = TimeLocal();
if (ExpectedTime2 == 0 || datetime800 > ExpectedTime2 + 60)
{
ExpectedTime2 = datetime800 + 60 * 1; // reset paused time
}
if (datetime800 >= ExpectedTime2 && datetime800 < ExpectedTime2 + 60)
{
ExpectedTime2 = datetime800 + 60 * 1;
Alert3();
}
}
void Alert3()
{
Alert("One minute gone");
}
int deinit()
{
if (true) ObjectsDeleteAll();
}
Doc Se hai bisogno di tutti questi elementi, non c'è un modo più semplice per scriverlo
Uhm, sfortuna questa volta, grazie comunque.
Saluti
doc
C'è un problema con la seconda chiamata StringConcatenate.
Stai sommando 3 diversi nomi di font e non ci sarà un nome valido risultante.
Robert
ciao a tutti!
Sto cercando di semplificare questo codice usando il comando stringconcatenate da questo:
ObjectSetText("uitog1v", StringConcatenate("/\\" ", uitog1v, "%"),12, hr1v, DodgerBlue );
a questo:
ObjectSetText("uitog1v", StringConcatenate("/\\\", uitog1v, "%","/\\", uitog2v, "%","/\\", uitog3v, "%"),12, StringConcatenate(hr1v,hr2v,hr3v), DodgerBlue );
Spero che qualcuno possa aiutarmi.
I migliori saluti
doc
trend_alexcud_v_2men.mq4Bisogno di aiuto con EA ... le compravendite non vengono chiuse nel tester
Sto lavorando su un EA, ma non importa cosa faccio, non riesco a fargli chiudere i trade. Le apre bene, ma quando voglio chiuderle, l'EA non le chiude.
Posterò parte del mio codice EA così forse uno di voi codificatori esperti può capire perché sto avendo questo problema. Le variabili 'buyTrade' e 'sellTrade' sono globali a tutto l'EA.
NOTA: Voglio solo UN trade aperto in qualsiasi momento, sia lungo che corto. I trade sono "sempre in" quindi quando arriva un segnale long, lo short esistente dovrebbe essere chiuso e viceversa.
Non sta facendo questo. Quello che sta facendo è aprire trade e poi apre altri thrades... e ne apre altri... e li tiene aperti fino a quando alla fine colpiscono tutti i loro stop.
Grazie in anticipo
// Buy signal ---------------------------------------
//if(buyTrade==false || sellTrade==false) {
if (STC_VIDYAprev = 10.00) {
if (sellTrade==true) {
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_BUY )
{ int OldTicket=OrderTicket(); double lots=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symAsk = NormalizeDouble( MarketInfo( Sym, MODE_ASK ), SymDigits );
bool closeSellOrder = OrderClose( OldTicket, lots, symAsk, 0, CLR_NONE );
}
sellTrade = false;
}
if(buyTrade==false) {
EnterLong(Sym, Lots, "");
buyTrade = true;
}
}
//else
//return(0);
// Sell signal ---------------------------------------
if (STC_VIDYAprev > 90.00 && STC_VIDYAcur <= 90.00 ) {
if (buyTrade==true) {
for (int j = OrdersTotal() - 1; j >= 0; j--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_SELL )
{ int oldTicket=OrderTicket(); double lotts=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symBid = NormalizeDouble( MarketInfo( Sym, MODE_BID ), SymDigits );
bool closeBuyOrder = OrderClose( oldTicket, lotts, symBid, 0, CLR_NONE );
}
buyTrade = false;
}
if(sellTrade==false) {
EnterShrt( Sym, Lots, "");
sellTrade = true;
}
}
//else
//return(0);...
Dato che questo è un codice parziale: provate a sostituire symBid con symAsk in chiusura di vendita e symAsk con symBid in chiusura di ordine di acquisto (invertite i prezzi di chiusura, non potete chiudere una vendita al prezzo di offerta e non potete chiudere un acquisto al prezzo di domanda)
Sto lavorando ad un EA, ma qualunque cosa faccia, non riesco a fargli chiudere le operazioni. Le apre bene, ma quando voglio chiuderle, l'EA non le chiude.
Posterò parte del mio codice EA così forse uno di voi codificatori esperti può capire perché sto avendo questo problema. Le variabili 'buyTrade' e 'sellTrade' sono globali a tutto l'EA.
NOTA: Voglio solo UN trade aperto in qualsiasi momento, sia lungo che corto. I trade sono "sempre in" quindi quando arriva un segnale long, lo short esistente dovrebbe essere chiuso e viceversa.
Non sta facendo questo. Quello che sta facendo è aprire trade e poi apre altri thrades... e ne apre altri... e li tiene aperti fino a quando non colpiscono tutti i loro stop.
Grazie in anticipo
// Buy signal ---------------------------------------
//if(buyTrade==false || sellTrade==false) {
if (STC_VIDYAprev = 10.00) {
if (sellTrade==true) {
for (int i = OrdersTotal() - 1; i >= 0; i--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_BUY )
{ int OldTicket=OrderTicket(); double lots=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symAsk = NormalizeDouble( MarketInfo( Sym, MODE_ASK ), SymDigits );
bool closeSellOrder = OrderClose( OldTicket, lots, symAsk, 0, CLR_NONE );
}
sellTrade = false;
}
if(buyTrade==false) {
EnterLong(Sym, Lots, "");
buyTrade = true;
}
}
//else
//return(0);
// Sell signal ---------------------------------------
if (STC_VIDYAprev > 90.00 && STC_VIDYAcur <= 90.00 ) {
if (buyTrade==true) {
for (int j = OrdersTotal() - 1; j >= 0; j--) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderType() == OP_SELL )
{ int oldTicket=OrderTicket(); double lotts=OrderLots();}
RefreshRates(); //OrderSelect() needed ?
double symBid = NormalizeDouble( MarketInfo( Sym, MODE_BID ), SymDigits );
bool closeBuyOrder = OrderClose( oldTicket, lotts, symBid, 0, CLR_NONE );
}
buyTrade = false;
}
if(sellTrade==false) {
EnterShrt( Sym, Lots, "");
sellTrade = true;
}
}
//else
//return(0);