//+------------------------------------------------------------------+//| MACD Sample.mq4 |//| Copyright 2005-2014, MetaQuotes Software Corp. |//| http://www.mql4.com |//+------------------------------------------------------------------+#property copyright"2005-2014, MetaQuotes Software Corp."#property link"http://www.mql4.com"inputdouble TakeProfit =2190;
inputdouble Lots =0.5;
inputdouble TrailingStop =650;
inputint OpenLevel =70;
inputint CloseLevel=23;
inputintPeriod =86;
inputint Period1 =87;
int LastBars=0;
externint Magic1 = 110721;
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnTick(void)
{
int cnt,ticket,total;
//---// initial data checks// it is important to make sure that the expert works with a normal// chart and the user did not make any mistakes setting external // variables (Lots, StopLoss, TakeProfit, // TrailingStop) in our case, we check TakeProfit// on a chart of less than 100 bars//---//--- Trade only if new bar has arrivedif(LastBars!=Bars) LastBars=Bars;
elsereturn(0);
if(Bars<100)
{
Print("bars less than 100");
return;
}
if(TakeProfit<10)
{
Print("TakeProfit less than 10");
return;
}
//--- to simplify the coding and speed up access data are put into internal variablesif(CountOrders("", -1,Magic1)<1)
total=OrdersTotal();
if(total<1)
{
//--- no opened orders identifiedif(AccountFreeMargin()<(1000*Lots))
{
Print("We have no money. Free Margin = ",AccountFreeMargin());
return;
}
//--- check for long position (BUY) possibilityif(iRSI(NULL,0,OpenLevel,PRICE_LOW,Period)>iRSI(NULL,0,CloseLevel,PRICE_HIGH,Period1))
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-TakeProfit*Point,Bid+TakeProfit*Point,"GBPCADD",Magic1,0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("BUY order opened : ",OrderOpenPrice());
}
elsePrint("Error opening BUY order : ",GetLastError());
return;
}
//--- check for short position (SELL) possibilityif(iRSI(NULL,0,OpenLevel,PRICE_LOW,Period1)<iRSI(NULL,0,CloseLevel,PRICE_HIGH,Period))
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+TakeProfit*Point,Ask-TakeProfit*Point,"GBPCADD",Magic1,0,Red);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("SELL order opened : ",OrderOpenPrice());
}
elsePrint("Error opening SELL order : ",GetLastError());
}
//--- exit from the "no opened orders" blockreturn;
}
//--- it is important to enter the market correctly, but it is more important to exit it correctly... for(cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()&& OrderMagicNumber()==Magic1) // check for symbol
{
//--- long position is openedif(OrderType()==OP_BUY)
{
//--- should it be closed?if(iRSI(NULL,0,OpenLevel,PRICE_LOW,Period1)<iRSI(NULL,0,CloseLevel,PRICE_HIGH,Period))
{
//--- close order and exitif(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
Print("OrderClose error ",GetLastError());
return;
}
//--- check for trailing stopif(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
//--- modify order and exitif(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green))
Print("OrderModify error ",GetLastError());
return;
}
}
}
}
else// go to short position
{
//--- should it be closed?if(iRSI(NULL,0,OpenLevel,PRICE_LOW,Period)>iRSI(NULL,0,CloseLevel,PRICE_HIGH,Period1))
{
//--- close order and exitif(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
Print("OrderClose error ",GetLastError());
return;
}
//--- check for trailing stopif(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
//--- modify order and exitif(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red))
Print("OrderModify error ",GetLastError());
return;
}
}
}
}
}
}
//---
}
//+------------------------------------------------------------------+//+----------------------------------------------------------------------------+//| Подсчет ордеров |//+----------------------------------------------------------------------------+//| -1 - Все типы ордеров |//| 0 - ордера типа BUY |//| 1 - ордера типа SELL |//| 2 - ордера типа BUYLIMIT |//| 3 - ордера типа SELLLIMIT |//| 4 - ордера типа BUYSTOP |//| 5 - ордера типа SELLSTOP |//+----------------------------------------------------------------------------+int CountOrders(string symb="", int or_ty=-1, int magiс=-1)
{
int cnt=0;
if(symb=="0") symb=_Symbol;
for(int pos=OrdersTotal()-1;pos>=0;pos--)
{
if(OrderSelect(pos,SELECT_BY_POS)==true)
{
if((OrderSymbol()==symb || symb=="")&&(or_ty<0 || or_ty==OrderType()))
{
if(magiс<0 || OrderMagicNumber()==magiс) cnt++;
}
}
}
return(cnt);
}
Ciao a tutti, volevo creare la mia libreria di funzioni perché uso spesso le stesse funzioni nei miei robot. Ho fatto tutto bene. Ho creato la libreria, l'ho messa nella cartella Libraries e l'ho inserita nel mio indicatore usando #import
#importare "andylib.ex4
bool KeyPr (long l, stringa k);
stringa TestFunc ();
#importare
Funzioni specificate nella libreria con una descrizione. Ma le funzioni della libreria non vengono chiamate. Ho provato a mettere il dialogo nella cartella degli indicatori o anche direttamente nel luogo dove si trova l'indicatore che si associa al dialogo, nessun risultato. Quale può essere il problema?
Ciao a tutti, volevo creare la mia libreria di funzioni perché uso spesso le stesse funzioni nei miei robot. Ho fatto tutto bene. Ho creato la libreria, l'ho messa nella cartella Libraries e l'ho inserita nel mio indicatore usando #import
#importare "andylib.ex4
bool KeyPr (long l, stringa k);
stringa TestFunc ();
#importare
Funzioni specificate nella libreria con una descrizione. Ma le funzioni della libreria non vengono chiamate. Ho provato a mettere il dialogo nella cartella degli indicatori o anche direttamente nella stessa cartella con l'indicatore, che si collega al dialogo, senza risultato. Quale può essere il problema?
Включение файлов (#include) - Препроцессор - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Ciao a tutti, volevo creare la mia libreria di funzioni perché uso spesso le stesse funzioni nei miei robot. Ho fatto tutto bene. Ho creato la libreria, l'ho messa nella cartella Libraries e l'ho inserita nel mio indicatore usando #import
#importare "andylib.ex4
bool KeyPr (long l, stringa k);
stringa TestFunc ();
#importare
Funzioni specificate nella libreria con una descrizione. Ma le funzioni della libreria non vengono chiamate. Ho provato a mettere il dialogo nella cartella degli indicatori o anche direttamente nella stessa cartella con l'indicatore, che si collega al dialogo, senza risultato. Quale può essere il problema?
Ti sei ricordato di scrivere export dopo il nome della funzione nella libreria?
Meglio ancora, non fare una libreria, ma un file .mqh con funzioni, anche senza una classe, e la compilazione prenderà solo le funzioni che sono necessarie e sono chiamate dall'EA/indicatore.
È la cosa giusta da fare?
È la cosa giusta da fare?
Grazie, è complicato, l'ho reso più semplice, solo un paio di righe.
Grazie, è complicato, l'ho reso più semplice, solo un paio di righe.
interessante vedere se
for(i=k; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
se(OrderSymbol()==Symbol()) {
if(OrderMagicNumber()== Magic) {
{ if(OrderType()>1) continua;
if(OrderType()==OP_BUY || OrderType()==OP_SELL) total++;
}}}}
//---
// total=OrdersTotal();
se(totale<1)
{
Ciao a tutti, volevo creare la mia libreria di funzioni perché uso spesso le stesse funzioni nei miei robot. Ho fatto tutto bene. Ho creato la libreria, l'ho messa nella cartella Libraries e l'ho inserita nel mio indicatore usando #import
#importare "andylib.ex4
bool KeyPr (long l, stringa k);
stringa TestFunc ();
#importare
Funzioni specificate nella libreria con una descrizione. Ma le funzioni della libreria non vengono chiamate. Ho provato a mettere il dialogo nella cartella degli indicatori o anche direttamente nel luogo dove si trova l'indicatore che si associa al dialogo, nessun risultato. Quale può essere il problema?
Ciao a tutti, volevo creare la mia libreria di funzioni perché uso spesso le stesse funzioni nei miei robot. Ho fatto tutto bene. Ho creato la libreria, l'ho messa nella cartella Libraries e l'ho inserita nel mio indicatore usando #import
#importare "andylib.ex4
bool KeyPr (long l, stringa k);
stringa TestFunc ();
#importare
Funzioni specificate nella libreria con una descrizione. Ma le funzioni della libreria non vengono chiamate. Ho provato a mettere il dialogo nella cartella degli indicatori o anche direttamente nella stessa cartella con l'indicatore, che si collega al dialogo, senza risultato. Quale può essere il problema?
includere
for(i=k; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
se(OrderSymbol()==Symbol()) {
if(OrderMagicNumber()== Magic) {
{ if(OrderType()>1) continua;
if(OrderType()==OP_BUY || OrderType()==OP_SELL) total++;
}}}}
//---
// total=OrdersTotal();
se(totale<1)
{
Quello che hai scritto non può funzionare.
Prima si calcola "total++" e poi si azzera e si imposta "OrdersTotal()", cioè tutti gli ordini
Ciao a tutti, volevo creare la mia libreria di funzioni perché uso spesso le stesse funzioni nei miei robot. Ho fatto tutto bene. Ho creato la libreria, l'ho messa nella cartella Libraries e l'ho inserita nel mio indicatore usando #import
#importare "andylib.ex4
bool KeyPr (long l, stringa k);
stringa TestFunc ();
#importare
Funzioni specificate nella libreria con una descrizione. Ma le funzioni della libreria non vengono chiamate. Ho provato a mettere il dialogo nella cartella degli indicatori o anche direttamente nella stessa cartella con l'indicatore, che si collega al dialogo, senza risultato. Quale può essere il problema?
Ti sei ricordato di scrivere export dopo il nome della funzione nella libreria?
Meglio ancora, non fare una libreria, ma un file .mqh con funzioni, anche senza una classe, e la compilazione prenderà solo le funzioni che sono necessarie e sono chiamate dall'EA/indicatore.