
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
Michel,
Grazie mille per aver trovato il tempo di guardare il codice e rispondere. A volte basta un altro paio di occhi! Avevi ragione, l'errore era la divisione per 0 con una barra mancante. Ora è tutto risolto.
BW
Spiegazione del codice - Ind-Fractals-1
qualcuno può spiegare come vengono determinati i frattali in questo indicatore(https://c.mql5.com/forextsd/forum/165/ind-fractals-1.mq4). Ho notato che come i normali frattali c'è un ritardo tra il punto di svolta e il frattale effettivo che viene disegnato, tuttavia vorrei sapere quanto è lungo questo ritardo. Penso che un frattale di 15 minuti viene disegnato 40-50 barre 1min dopo che il punto è stabilito. Ho anche notato che il colore dei frattali cambia (anche se la loro posizione non lo fa) come alcuni frattali 15min diventano frattali 1hr.
come codificare quanto segue?
Ciao a tutti,
Sono un nuovo arrivato in metatrader 4. Non so molto di codifica in mt4.
Voglio che metatrader dia un avviso quando
1. La media mobile semplice a 30 periodi sale sopra la media mobile semplice a 60 periodi.
2. La media mobile semplice del periodo 30 cade sotto la media mobile semplice del periodo 60.
Qualcuno può aiutarmi a postare il codice qui?
grazie mille
Ciao a tutti,
Sono un nuovo arrivato in metatrader 4. Non so molto di codifica in mt4.
Voglio che metatrader dia un avviso quando
1. La media mobile semplice a 30 periodi sale sopra la media mobile semplice a 60 periodi.
2. La media mobile semplice del periodo 30 cade sotto la media mobile semplice del periodo 60.
Qualcuno può aiutarmi a postare il codice qui?
grazie millePerché non usare questo? metti la tua MA e scegli 0 per semplice, ti dà linee e frecce
Grazie mille~~
Perché non usare questo? metti la tua MA e scegli 0 per semplice, ti dà linee e frecce
Ciao, vorrei far apparire il segnale quando la 2 candela pulita è finita dopo il cross over.thx in anticipo
pls aiutare a correggere il mio codice
Prima di tutto, credo che questo codice sia molto utile, molti lo ameranno. Quindi per favore aiutatemi a migliorarlo.
In effetti, questo codice funziona già alla grande. Ma sono stanco del semplice Alert popup, senza alcun simbolo mostrato. Così ho cambiato/aggiunto alcune linee per provare, che è la parte %%%%%%%%%.
Non so perché, stampa, commento... qualunque cosa, non succede niente.
E, stranamente, potete vedere nella parte "----alert----", ho cambiato l'avviso UPBREAK in qualcos'altro, ma mostra ancora "UP BREAK". ---- Sono sicuro che ogni volta che riscrivo il codice, lo compilo, lo cancello dal grafico e lo carico di nuovo.
Qualche idea?
#property indicator_chart_window
#import "usr32.dll" // %%%%%%%%%%
int MessageBoxA(int hWnd,string lpText,string lpCaption,int uType); //%%%%%%%%%%
#import //%%%%%%%%%%
int PrevAlertTime = 0;
int init()
{
return(0);
}
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
int start()
{
int i=ObjectsTotal();
int redtotal=0,j,typ1;
double price1,price2,up,down;
color col;
string name1,name2,nameup,namedown,warn1,sym=Symbol();
warn1=sym + "Break Up"; //%%%%%%%%%%
Print(sym); //%%%%%%%%%%%
//----make sure exactly 2 red lines on chart---------------------
for (j=0; j<i; j++)
if(ObjectGet(ObjectName(j),OBJPROP_COLOR)==255 && ObjectType(ObjectName(j))==OBJ_TREND)
{ redtotal++;
if (redtotal==1) name1=ObjectName(j);
if (redtotal==2) name2=ObjectName(j);
}
if (redtotal==2)
{
if(ObjectFind("remind")==0) ObjectDelete("remind");
}
else
{
ObjectCreate("remind",OBJ_LABEL,0,0,0);
ObjectSet("remind", OBJPROP_XDISTANCE,0);
ObjectSet("remind", OBJPROP_YDISTANCE,20);
ObjectSetText("remind", "Keep exactly 2 red lines on chart" ,16,"Times New Roman",Blue);
return(0); // question here: what should I use, 0 or -1 ?
}
//--------decide which line is up / down ---------------------
price1=NormalizeDouble(ObjectGetValueByShift(name1,1),
MarketInfo(Symbol(),MODE_DIGITS));
price2=NormalizeDouble(ObjectGetValueByShift(name2,1),
MarketInfo(Symbol(),MODE_DIGITS));
if (price2>=price1)
{
nameup=name2; namedown=name1;
up=price2; down=price1;
}
else
{ nameup=name1; namedown=name2;
up=price1; down=price2;
}
//-------- alert ----------------------------------------------
if (TimeCurrent() - PrevAlertTime > Period()*60/3)
{
if (Close[1]up)
{ MessageBoxA(NULL,"tupole","11111",0); // %%%%%%%%%%
Print(Symbol()); // %%%%%%%%%%
PrevAlertTime = TimeCurrent();
}
if (Close[1]>=down && Close[0]<down)
{ Alert("DOWN BREAK",Symbol());
PrevAlertTime = TimeCurrent();
}
}
return(0);
}
Ho trovato cosa c'è di sbagliato:
Di solito, creo o modifico un codice con: "Metaeditor---file---nuovo/apri..."
Ma ho appena scoperto: dopo aver attaccato al grafico, e poi alcune modifiche in questo codice, alla fine altre modifiche non hanno più effetto sul grafico (sicuramente ho compilato!)----- ma "Metaeditor--navigatore--file---mio codice..." sì! È strano, dovrebbero essere lo stesso codice!
Aiuto con il codice delle tracce
{
if (byPips >=5)
{
for (int i = 0; i < OrdersTotal(); i++) {
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...
{
if (OrderType() == OP_BUY) {
//if (Bid > (OrderValue(cnt,VAL_OPENPRICE) + TrailingStop * Point)) {
// OrderClose(OrderTicket(), OrderLots(), Bid, 3, Violet);
// break;
//}
if (Bid - OrderOpenPrice() > byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {
if (OrderStopLoss() < Bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {
OrderModify(OrderTicket(), OrderOpenPrice(), Bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);
}
}
} else if (OrderType() == OP_SELL) {
if (OrderOpenPrice() - Ask > byPips * MarketInfo(OrderSymbol(), MODE_POINT)) {
if ((OrderStopLoss() > Ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT)) ||
(OrderStopLoss() == 0)) {
OrderModify(OrderTicket(), OrderOpenPrice(),
Ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);
}
}
}
}
}
}
} // proc TrailIt()Questo è il codice. Come si vede nell'allegato su un ordine, modificherà lo stop ma lo modificherà anche nella direzione sbagliata e non riesco a risolverlo. Apprezzerei molto l'aiuto per trovare la soluzione!
Prova questo. Sembra che tu stia cercando di modificare gli ordini con diversi simboli. Se è così, il Bid e l'Ask estrarranno i dati di mercato solo dal simbolo della finestra del grafico a cui è collegato l'EA. Usare MarketData(symbol, MODE_BID) è il modo per ottenere i dati appropriati.
{
if (byPips >=5)
{
for (int i = 0; i < OrdersTotal(); i++)
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
double bid=MarketInfo(OrderSymbol(),MODE_BID);
double ask=MarketInfo(OrderSymbol(),MODE_ASK);
if ( OrderSymbol()==Symbol() && ( (OrderMagicNumber() == uniqueGridMagic) || (OrderComment() == GridName)) ) // only look if mygrid and symbol...
{
if (OrderType() == OP_BUY)
{
if (bid - OrderOpenPrice() >= byPips * MarketInfo(OrderSymbol(), MODE_POINT))
{
if (OrderStopLoss() < bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT)|| (OrderStopLoss() == 0))
{
OrderModify(OrderTicket(), OrderOpenPrice(), bid - byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);
}
}
}
else if (OrderType() == OP_SELL)
{
if (OrderOpenPrice() - ask >= byPips * MarketInfo(OrderSymbol(), MODE_POINT))
{
if ((OrderStopLoss() > ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT)) || (OrderStopLoss() == 0))
{
OrderModify(OrderTicket(), OrderOpenPrice(),ask + byPips * MarketInfo(OrderSymbol(), MODE_POINT), OrderTakeProfit(), Red);
}
}
}
}
}
}
return;
}