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
C'è la possibilità di aggiungere opzioni da scegliere?
Per esempio,
Separatamente, acquisto e vendita separatamente
Modifica: BE tutti comprare 0, o +1, o +2 pips o vendere tutti BE 0, 1 o 2 pips?
È possibile?
be.mq4
Ciao Mladen,
Qualcuno può per favore dirmi cosa sto facendo di sbagliato, io per lo più scrivo il mio ea usando FX Gen con snippets e codici usando esempi dal compilatore mq4 e forum online. sto cercando di codificare la mia strategia per un trading più facile, sono stato in grado di selezionare l'ultimo ordine con successo usando questo codice.
void OpenNewTrade()
{ datetime lastTime = 0;
int lastTicket = -1; // Nessuno aperto.
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
if (OrderType() == OP_BUY || OrderType() == OP_SELL
&& Ask - OrderOpenPrice() >= Grid*PipValue*Point
{
{
BuyOrder();
}
}
if (OrderType() == OP_BUY || OrderType() == OP_SELL
&& OrderOpenPrice() - Bid >= Grid*PipValue*Point
{
{
SellOrder();
}
}
}
return(lastTicket);
}
else
Print("OrderSelect() error - ", ErrorDescription(GetLastError());
}
Puoi dare un'occhiata a questo codice sto cercando di eliminare l'ordine più vecchio prima usando datetime e biglietto d'ordine, ad esempio se l'ordine aperto >2 elimina l'ordine più vecchio.
//-------------------------------------------------------------
// Etasoft Inc. Forex EA e Script Generator versione 4.1 EA
//-------------------------------------------------------------
// Parole chiave: MT4, Forex EA builder, creare EA, expert advisor developer
#property copyright "Copyright © 2011, Etasoft Inc. Forex EA Generator v4.1"
#proprietà link
#include
#include
// variabili esportate
extern int OrderId = 1;
extern int Slippage = 2
extern double Lots = 0.01;
extern int MaxOrdersAllowed = 2; // op buy e op sell consentiti
extern int Grid = 10; // distanza totale in pip agli ordini aperti
extern string EAComment = "564 test";
// variabili locali
double PipValue=1; // questa variabile è qui per supportare i broker a 5 cifre
bool Terminated = false;
string LF = "\n"; // usa questo in blocchi personalizzati o di utilità dove hai bisogno di avanzamenti di linea
int NDigits = 4; // usato soprattutto per NormalizeDouble nei blocchi di tipo Flex
int ObjCount = 0; // conta di tutti gli oggetti creati sul grafico, permette la creazione di oggetti con nomi unici
int current = 0;
int init()
{
NDigits = Digits;
if (false) ObjectsDeleteAll(); // cancella il grafico
Comment(""); // cancella il grafico
}
// Inizio esperto
int start()
{
se (Bars < 10)
{
Comment("Non ci sono abbastanza barre");
return (0);
}
if (Terminato == true)
{
Comment("EA Terminato");
return (0);
}
OnEveryTick1();
}
void OnEveryTick1()
{
if (true == false && false) PipValue = 10;
if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
IfOrderDoesNotExist2();
IfOrderDoesNotExist4();
MassimoOrdine();
}
void IfOrderDoesNotExist2()
{
bool exists = false;
for (int i=OrdiniTotali()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
esiste = true;
}
}
else
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError());
}
if (exists == false)
{
BuyPendingOrder();
}
}
void IfOrderDoesNotExist4()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
esiste = true;
}
}
else
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError());
}
if (exists == false)
{
SellPendingOrder();
}
}
void BuyPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point;
doppio SL = prezzo - 0*PipValue*Point;
se (0 == 0) SL = 0;
doppio TP = prezzo + 0*PipValue*Point;
se (0 == 0) TP = 0;
if (0 == 0) expire = 0;
int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue);
if (ticket == -1)
{
Print("OrderSend() error - ", ErrorDescription(GetLastError());
}
}
void SellPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point;
doppio SL = prezzo + 0*PipValue*Point;
se (0 == 0) SL = 0;
doppio TP = prezzo - 0*PipValue*Point;
se (0 == 0) TP = 0;
if (0 == 0) expire = 0;
int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lotti, prezzo, Slippage, SL, TP, EAComment, OrderId, expire, Red);
se (ticket == -1)
{
Print("OrderSend() error - ", ErrorDescription(GetLastError());
}
}
void MaximumOrder()
{
if (MaxOrdersAllowed> 0)
{
OrderCount();
}
}
void OrderCount()
{
int count = 0;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol())
se (OrderMagicNumber() == OrderId)
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
count++;
}
}
else
{
Print("OrderSend() error - ", ErrorDescription(GetLastError());
}
if (count > MaxOrdersAllowed )
{
DeleteOldestOrder();
}
}
void DeleteOldestOrder()
{
datetime lastTime = 0;
int lastTicket = -1; // Nessuno aperto.
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
if (OrderType() == OP_BUY || OrderType() == OP_SELL )
{
{
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);
}
}
}
return(lastTicket);
}
else
Print("OrderSelect() error - ", ErrorDescription(GetLastError());
}
int deinit()
{
if (false) ObjectsDeleteAll();
}
Ciao Mladen ,
Qualcuno può per favore dirmi cosa sto facendo di sbagliato, io per lo più scrivo il mio ea usando FX Gen con snippets e codici usando esempi dal compilatore mq4 e forum online. sto cercando di codificare la mia strategia per un trading più facile, sono stato capace di selezionare l'ultimo ordine con successo usando questo codice.
void OpenNewTrade()
{ datetime lastTime = 0;
int lastTicket = -1; // Nessuno aperto.
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() >= lastTime && OrderTicket() > lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
if (OrderType() == OP_BUY || OrderType() == OP_SELL
&& Ask - OrderOpenPrice() >= Grid*PipValue*Point
{
{
BuyOrder();
}
}
if (OrderType() == OP_BUY || OrderType() == OP_SELL
&& OrderOpenPrice() - Bid >= Grid*PipValue*Point
{
{
SellOrder();
}
}
}
return(lastTicket);
}
else
Print("OrderSelect() error - ", ErrorDescription(GetLastError());
}
Puoi dare un'occhiata a questo codice sto cercando di eliminare l'ordine più vecchio prima usando datetime e biglietto d'ordine, ad esempio se l'ordine aperto >2 elimina l'ordine più vecchio.
//-------------------------------------------------------------
// Etasoft Inc. Forex EA e Script Generator versione 4.1 EA
//-------------------------------------------------------------
// Parole chiave: MT4, Forex EA builder, creare EA, expert advisor developer
#property copyright "Copyright © 2011, Etasoft Inc. Forex EA Generator v4.1"
#proprietà link
#include
#include
// variabili esportate
extern int OrderId = 1;
extern int Slippage = 2
extern double Lots = 0.01;
extern int MaxOrdersAllowed = 2; // op buy e op sell consentiti
extern int Grid = 10; // distanza totale in pip agli ordini aperti
extern string EAComment = "564 test";
// variabili locali
double PipValue=1; // questa variabile è qui per supportare i broker a 5 cifre
bool Terminated = false;
string LF = "\n"; // usa questo in blocchi personalizzati o di utilità dove hai bisogno di avanzamenti di linea
int NDigits = 4; // usato soprattutto per NormalizeDouble nei blocchi di tipo Flex
int ObjCount = 0; // conta di tutti gli oggetti creati sul grafico, permette la creazione di oggetti con nomi unici
int current = 0;
int init()
{
NDigits = Digits;
if (false) ObjectsDeleteAll(); // cancella il grafico
Comment(""); // cancella il grafico
}
// Inizio esperto
int start()
{
se (Bars < 10)
{
Comment("Non ci sono abbastanza barre");
return (0);
}
if (Terminato == true)
{
Comment("EA Terminato");
return (0);
}
OnEveryTick1();
}
void OnEveryTick1()
{
if (true == false && false) PipValue = 10;
if (true && (NDigits == 3 || NDigits == 5)) PipValue = 10;
IfOrderDoesNotExist2();
IfOrderDoesNotExist4();
MassimoOrdine();
}
void IfOrderDoesNotExist2()
{
bool exists = false;
for (int i=OrdiniTotali()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_BUYSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
esiste = true;
}
}
else
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError());
}
if (exists == false)
{
BuyPendingOrder();
}
}
void IfOrderDoesNotExist4()
{
bool exists = false;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderType() == OP_SELLSTOP && OrderSymbol() == Symbol() && OrderMagicNumber() == 1)
{
esiste = true;
}
}
else
{
Print("OrderSelect() error - ", ErrorDescription(GetLastError());
}
if (exists == false)
{
SellPendingOrder();
}
}
void BuyPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Ask-((Ask-Bid)/2)), NDigits) + Grid*PipValue*Point;
doppio SL = prezzo - 0*PipValue*Point;
se (0 == 0) SL = 0;
doppio TP = prezzo + 0*PipValue*Point;
se (0 == 0) TP = 0;
if (0 == 0) expire = 0;
int ticket = OrderSend(Symbol(), OP_BUYSTOP, Lots, price, Slippage, SL, TP, EAComment, OrderId, expire, Blue);
if (ticket == -1)
{
Print("OrderSend() error - ", ErrorDescription(GetLastError());
}
}
void SellPendingOrder()
{
int expire = TimeCurrent() + 60 * 0;
double price = NormalizeDouble((Bid+((Ask-Bid)/2)), NDigits) - Grid*PipValue*Point;
doppio SL = prezzo + 0*PipValue*Point;
se (0 == 0) SL = 0;
doppio TP = prezzo - 0*PipValue*Point;
se (0 == 0) TP = 0;
if (0 == 0) expire = 0;
int ticket = OrderSend(Symbol(), OP_SELLSTOP, Lotti, prezzo, Slippage, SL, TP, EAComment, OrderId, expire, Red);
se (ticket == -1)
{
Print("OrderSend() error - ", ErrorDescription(GetLastError());
}
}
void MaximumOrder()
{
if (MaxOrdersAllowed> 0)
{
OrderCount();
}
}
void OrderCount()
{
int count = 0;
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol())
if (OrderMagicNumber() == OrderId)
if (OrderType() == OP_BUY || OrderType() == OP_SELL)
{
count++;
}
}
else
{
Print("OrderSend() error - ", ErrorDescription(GetLastError());
}
if (count > MaxOrdersAllowed )
{
DeleteOldestOrder();
}
}
void DeleteOldestOrder()
{
datetime lastTime = 0;
int lastTicket = -1; // Nessuno aperto.
for (int i=OrdersTotal()-1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() < lastTime && OrderTicket() < lastTicket )
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
if (OrderType() == OP_BUY || OrderType() == OP_SELL )
{
{
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);
}
}
}
return(lastTicket);
}
else
Print("OrderSelect() error - ", ErrorDescription(GetLastError());
}
int deinit()
{
if (false) ObjectsDeleteAll();
}
Prova a usare una funzione come questa:
{
datetime lastTime = Time[0]+Period()*60;
int lastTicket = -1; // None open.
for (int i=OrdersTotal()-1; i >= 0; i--)
{
if (!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
if ((OrderType() == OP_BUY || OrderType() == OP_SELL) && OrderSymbol() == Symbol() && OrderMagicNumber() == OrderId && OrderOpenTime() <= lastTime)
{
lastTime = OrderOpenTime();
lastTicket = OrderTicket();
}
}
if (lastTicket>-1)
if (OrderSelect(lastTicket,SELECT_BY_TICKET,MODE_TRADES))
OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(),Slippage,Red);
}Grazie Mladen
ha funzionato perfettamente, btw mi scuso per aver postato un pezzo di codice così lungo sul forum. Mi sto ancora abituando all'interfaccia. Grazie.
L'indicatore non si aggiorna automaticamente.
Qui ho un indicatore che è molto adatto al mio trading.
Purtroppo non si aggiorna da solo. Devo sempre aggiornare manualmente che sia rinnovato.
C'è un modo per risolvere questo problema?
Sarebbe molto utile!
Grazie in anticipo.
P.S.: In allegato tutto quello che ho.
Vuole l'sms di notifica. Come appare il codice?
Vuole l'sms di notifica. Come appare il codice?
papaj30
Fai così :
SendNotification("messaggio di notifica che vuoi inviare");
E dove inserisci il tuo numero di telefono? Il mio numero 0039 555-23-45. Dove inserire ?
Esempio:
#property indicator_minimum -1.1
#property indicator_maximum 1.1
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Lime
extern int period = 25;
extern int limit = 5000;
double g_ibuf_84[];
double g_ibuf_88[];
double g_ibuf_92[];
int init() {
IndicatorBuffers(3);
SetIndexStyle(0, DRAW_ARROW);
SetIndexStyle(1, DRAW_ARROW);
SetIndexStyle(2, DRAW_NONE);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexArrow(0, 233);
SetIndexArrow(1, 234);
SetIndexBuffer(0, g_ibuf_88);
SetIndexBuffer(1, g_ibuf_92);
SetIndexBuffer(2, g_ibuf_84);
IndicatorShortName("BR16");
return (0);
}
int start() {
double ld_72;
double ld_24 = 0;
double ld_32 = 0;
double ld_unused_40 = 0;
double ld_unused_48 = 0;
double ld_56 = 0;
double ld_unused_64 = 0;
double l_low_80 = 0;
double l_high_88 = 0;
for (int li_96 = 0; li_96 <= limit; li_96++) {
g_ibuf_88[li_96] = 0;
g_ibuf_92[li_96] = 0;
}
for (li_96 = 0; li_96 <= limit; li_96++) {
l_high_88 = High;
l_low_80 = Low;
ld_72 = (High[li_96] + Low[li_96]) / 2.0;
if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;
else ld_24 = 0.0;
ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);
g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;
ld_32 = ld_24;
ld_56 = g_ibuf_84[li_96];
}
for (li_96 = 0; li_96 <= limit; li_96++) {
if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;
if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;
}
return (0);
}E dove inserisci il tuo numero di telefono? Il mio numero 0039 555-23-45. Dove inserire ?
Esempio:
#property indicator_minimum -1.1
#property indicator_maximum 1.1
#property indicator_buffers 2
#property indicator_color1 Aqua
#property indicator_color2 Lime
extern int period = 25;
extern int limit = 5000;
double g_ibuf_84[];
double g_ibuf_88[];
double g_ibuf_92[];
int init() {
IndicatorBuffers(3);
SetIndexStyle(0, DRAW_ARROW);
SetIndexStyle(1, DRAW_ARROW);
SetIndexStyle(2, DRAW_NONE);
SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexArrow(0, 233);
SetIndexArrow(1, 234);
SetIndexBuffer(0, g_ibuf_88);
SetIndexBuffer(1, g_ibuf_92);
SetIndexBuffer(2, g_ibuf_84);
IndicatorShortName("BR16");
return (0);
}
int start() {
double ld_72;
double ld_24 = 0;
double ld_32 = 0;
double ld_unused_40 = 0;
double ld_unused_48 = 0;
double ld_56 = 0;
double ld_unused_64 = 0;
double l_low_80 = 0;
double l_high_88 = 0;
for (int li_96 = 0; li_96 <= limit; li_96++) {
g_ibuf_88[li_96] = 0;
g_ibuf_92[li_96] = 0;
}
for (li_96 = 0; li_96 <= limit; li_96++) {
l_high_88 = High;
l_low_80 = Low;
ld_72 = (High[li_96] + Low[li_96]) / 2.0;
if (l_high_88 != l_low_80) ld_24 = 0.66 * ((ld_72 - l_low_80) / (l_high_88 - l_low_80) - 0.5) + 0.67 * ld_32;
else ld_24 = 0.0;
ld_24 = MathMin(MathMax(ld_24, -0.999), 0.999);
g_ibuf_84[li_96] = MathLog((ld_24 + 1.0) / (1 - ld_24)) / 2.0 + ld_56 / 2.0;
ld_32 = ld_24;
ld_56 = g_ibuf_84[li_96];
}
for (li_96 = 0; li_96 <= limit; li_96++) {
if (g_ibuf_84[li_96] >= 0.0 && g_ibuf_84[li_96 + 1] < 0.0) g_ibuf_88[li_96] = -1;
if (g_ibuf_84[li_96] 0.0) g_ibuf_92[li_96] = 1;
}
return (0);
}Qui c'è una buona spiegazione su come si può fare:
L'indicatore non si aggiorna automaticamente.
Qui ho un indicatore che è molto adatto al mio trading.
Purtroppo non si aggiorna da solo. Devo sempre aggiornare manualmente che si rinnova.
C'è un modo per risolvere questo problema?
Sarebbe molto utile!
Grazie in anticipo.
P.S.: In allegato tutto quello che ho.Jim
Invece di riscrivere l'intera cosa aggiungi un limite per calcolare le barre e poi tutte quelle barre vengono ricalcolate. Questo dovrebbe risolvere il problema del refresh (basta mantenere il BarsTocalculate ad un valore ragionevole - non troppo grande e non troppo piccolo. Ho usato 1000 come valore predefinito e sembra andare bene così). Provalo