//+------------------------------------------------------------------+//| 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);
}
Bonjour à tous, Je voulais créer ma propre bibliothèque de fonctions car j'utilise souvent les mêmes fonctions dans mes robots. J'ai fait tout ce qu'il fallait. J'ai créé la bibliothèque, je l'ai placée dans le dossier Librairies et je l'ai insérée dans mon indicateur en utilisant #import.
#import "andylib.ex4".
bool KeyPr (long l, string k) ;
chaîne TestFunc () ;
#import
Fonctions spécifiées dans la bibliothèque avec une description. Mais les fonctions de la bibliothèque ne sont pas appelées. J'ai essayé de mettre le dialogue dans le dossier des indicateurs ou même directement dans le même dossier avec l'indicateur, qui se connecte au dialogue, sans résultat. Quel peut être le problème ?
Bonjour à tous, Je voulais créer ma propre bibliothèque de fonctions car j'utilise souvent les mêmes fonctions dans mes robots. J'ai fait tout ce qu'il fallait. J'ai créé la bibliothèque, je l'ai placée dans le dossier Librairies et je l'ai insérée dans mon indicateur en utilisant #import.
#import "andylib.ex4".
bool KeyPr (long l, string k) ;
chaîne TestFunc () ;
#import
Fonctions spécifiées dans la bibliothèque avec une description. Mais les fonctions de la bibliothèque ne sont pas appelées. J'ai essayé de mettre le dialogue dans le dossier des indicateurs ou même directement à l'endroit où se trouve l'indicateur, qui s'associe au dialogue, aucun résultat. Quel peut être le problème ?
Включение файлов (#include) - Препроцессор - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Bonjour à tous, Je voulais créer ma propre bibliothèque de fonctions car j'utilise souvent les mêmes fonctions dans mes robots. J'ai fait tout ce qu'il fallait. J'ai créé la bibliothèque, je l'ai placée dans le dossier Librairies et je l'ai insérée dans mon indicateur en utilisant #import.
#import "andylib.ex4".
bool KeyPr (long l, string k) ;
chaîne TestFunc () ;
#import
Fonctions spécifiées dans la bibliothèque avec une description. Mais les fonctions de la bibliothèque ne sont pas appelées. J'ai essayé de mettre le dialogue dans le dossier des indicateurs ou même directement à l'endroit où se trouve l'indicateur, qui s'associe au dialogue, aucun résultat. Quel peut être le problème ?
Avez-vous pensé à écrire export après le nom de la fonction dans la bibliothèque ?
Mieux encore, ne faites pas une bibliothèque, mais un fichier .mqh avec des fonctions, même sans classe, et la compilation ne prendra que les fonctions qui sont nécessaires et qui sont appelées par l'EA/indicateur.
Est-ce que c'est la bonne chose à faire ?
Est-ce que c'est la bonne chose à faire ?
Merci. C'est compliqué. Je l'ai simplifié, juste quelques lignes.
Merci. C'est compliqué. Je l'ai simplifié, juste quelques lignes.
intéressant de voir si
for(i=k ; i>=0 ; i--) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
si(OrderSymbol()==Symbol()) {
si(OrderMagicNumber()== Magic) {
{si(OrderType()>1) continuer ;
si(OrderType()==OP_BUY || OrderType()==OP_SELL) total++ ;
}}}}
//---
// total=OrdersTotal() ;
si(total<1)
{
Bonjour à tous, Je voulais créer ma propre bibliothèque de fonctions car j'utilise souvent les mêmes fonctions dans mes robots. J'ai fait tout ce qu'il fallait. J'ai créé la bibliothèque, je l'ai placée dans le dossier Librairies et je l'ai insérée dans mon indicateur en utilisant #import.
#import "andylib.ex4".
bool KeyPr (long l, string k) ;
chaîne TestFunc () ;
#import
Fonctions spécifiées dans la bibliothèque avec une description. Mais les fonctions de la bibliothèque ne sont pas appelées. J'ai essayé de mettre le dialogue dans le dossier des indicateurs ou même directement dans le même dossier avec l'indicateur, qui se connecte au dialogue, sans résultat. Quel peut être le problème ?
Bonjour à tous, Je voulais créer ma propre bibliothèque de fonctions car j'utilise souvent les mêmes fonctions dans mes robots. J'ai fait tout ce qu'il fallait. J'ai créé la bibliothèque, je l'ai placée dans le dossier Librairies et je l'ai insérée dans mon indicateur en utilisant #import.
#import "andylib.ex4".
bool KeyPr (long l, string k) ;
chaîne TestFunc () ;
#import
Fonctions spécifiées dans la bibliothèque avec une description. Mais les fonctions de la bibliothèque ne sont pas appelées. J'ai essayé de mettre le dialogue dans le dossier des indicateurs ou même directement à l'endroit où se trouve l'indicateur, qui s'associe au dialogue, aucun résultat. Quel peut être le problème ?
inclure
for(i=k ; i>=0 ; i--) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
si(OrderSymbol()==Symbol()) {
si(OrderMagicNumber()== Magic) {
{si(OrderType()>1) continuer ;
si(OrderType()==OP_BUY || OrderType()==OP_SELL) total++ ;
}}}}
//---
// total=OrdersTotal() ;
si(total<1)
{
Ce que tu as écrit ne peut pas marcher.
Vous calculez d'abord "total++", puis vous mettez à zéro et définissez "OrdersTotal()", c'est-à-dire tous les ordres.
Bonjour à tous, Je voulais créer ma propre bibliothèque de fonctions car j'utilise souvent les mêmes fonctions dans mes robots. J'ai fait tout ce qu'il fallait. J'ai créé la bibliothèque, je l'ai placée dans le dossier Librairies et je l'ai insérée dans mon indicateur en utilisant #import.
#import "andylib.ex4".
bool KeyPr (long l, string k) ;
chaîne TestFunc () ;
#import
Fonctions spécifiées dans la bibliothèque avec une description. Mais les fonctions de la bibliothèque ne sont pas appelées. J'ai essayé de mettre le dialogue dans le dossier des indicateurs ou même directement à l'endroit où se trouve l'indicateur, qui s'associe au dialogue, aucun résultat. Quel peut être le problème ?
Avez-vous pensé à écrire export après le nom de la fonction dans la bibliothèque ?
Mieux encore, ne faites pas une bibliothèque, mais un fichier .mqh avec des fonctions, même sans classe, et la compilation ne prendra que les fonctions qui sont nécessaires et qui sont appelées par l'EA/indicateur.