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.
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.
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); //%%%%%%%%%%
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!
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.
void TrailIt( int byPips ) // based on trailing stop code from MT site... thanks MT!
{
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))
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;
}