//+------------------------------------------------------------------+//| 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);
}
Всем привет! Захотелось создать свою библиотеку функций, потому что в своих роботах часто использую одни и те же функции. Все сделал вроде правильно. Создал библиотеку, кинул в папку Libraries, подключил библиотеку в индикаторе через #import
#import "andylib.ex4"
bool KeyPr (long l, string k);
string TestFunc ();
#import
Указал функции в библиотеке с описанием. Но функции из библиотеки не вызываются. Пробовал кидать библ в папку индикаторов и даже непосредственно туда, где лежит индикатор, связывающийся с библ, без результата. В чем может быть дело?
Всем привет! Захотелось создать свою библиотеку функций, потому что в своих роботах часто использую одни и те же функции. Все сделал вроде правильно. Создал библиотеку, кинул в папку Libraries, подключил библиотеку в индикаторе через #import
#import "andylib.ex4"
bool KeyPr (long l, string k);
string TestFunc ();
#import
Указал функции в библиотеке с описанием. Но функции из библиотеки не вызываются. Пробовал кидать библ в папку индикаторов и даже непосредственно туда, где лежит индикатор, связывающийся с библ, без результата. В чем может быть дело?
Включение файлов (#include) - Препроцессор - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Всем привет! Захотелось создать свою библиотеку функций, потому что в своих роботах часто использую одни и те же функции. Все сделал вроде правильно. Создал библиотеку, кинул в папку Libraries, подключил библиотеку в индикаторе через #import
#import "andylib.ex4"
bool KeyPr (long l, string k);
string TestFunc ();
#import
Указал функции в библиотеке с описанием. Но функции из библиотеки не вызываются. Пробовал кидать библ в папку индикаторов и даже непосредственно туда, где лежит индикатор, связывающийся с библ, без результата. В чем может быть дело?
В библиотеке после названия функции не забыли написать export?
А лучше сделать не библиотеку, а .mqh файл в который напихать функции даже без класса и при компиляции будут браться только те которые нужны, к которым есть обращение из советника\индикатора.
Так будет правильно?
Так будет правильно?
Спасибо.Это сложный вариант.Сделал все более проще ,всего пару строк.
Спасибо.Это сложный вариант.Сделал все более проще ,всего пару строк.
интересно посмотреть, если не жалко
for(i=k; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
if(OrderSymbol()==Symbol()) {
if(OrderMagicNumber() == Magic) {
if(OrderType()>1) continue;
if(OrderType()==OP_BUY || OrderType()==OP_SELL) total++;
}}}}
//---
// total=OrdersTotal();
if(total<1)
{
Всем привет! Захотелось создать свою библиотеку функций, потому что в своих роботах часто использую одни и те же функции. Все сделал вроде правильно. Создал библиотеку, кинул в папку Libraries, подключил библиотеку в индикаторе через #import
#import "andylib.ex4"
bool KeyPr (long l, string k);
string TestFunc ();
#import
Указал функции в библиотеке с описанием. Но функции из библиотеки не вызываются. Пробовал кидать библ в папку индикаторов и даже непосредственно туда, где лежит индикатор, связывающийся с библ, без результата. В чем может быть дело?
Всем привет! Захотелось создать свою библиотеку функций, потому что в своих роботах часто использую одни и те же функции. Все сделал вроде правильно. Создал библиотеку, кинул в папку Libraries, подключил библиотеку в индикаторе через #import
#import "andylib.ex4"
bool KeyPr (long l, string k);
string TestFunc ();
#import
Указал функции в библиотеке с описанием. Но функции из библиотеки не вызываются. Пробовал кидать библ в папку индикаторов и даже непосредственно туда, где лежит индикатор, связывающийся с библ, без результата. В чем может быть дело?
include
for(i=k; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) {
if(OrderSymbol()==Symbol()) {
if(OrderMagicNumber() == Magic) {
if(OrderType()>1) continue;
if(OrderType()==OP_BUY || OrderType()==OP_SELL) total++;
}}}}
//---
// total=OrdersTotal();
if(total<1)
{
То что ты написал не может работать.
Сначала ты высчитываешь "total++", а потом обнуляешь и задаешь значение "OrdersTotal()",т.е. все ордера
Всем привет! Захотелось создать свою библиотеку функций, потому что в своих роботах часто использую одни и те же функции. Все сделал вроде правильно. Создал библиотеку, кинул в папку Libraries, подключил библиотеку в индикаторе через #import
#import "andylib.ex4"
bool KeyPr (long l, string k);
string TestFunc ();
#import
Указал функции в библиотеке с описанием. Но функции из библиотеки не вызываются. Пробовал кидать библ в папку индикаторов и даже непосредственно туда, где лежит индикатор, связывающийся с библ, без результата. В чем может быть дело?
В библиотеке после названия функции не забыли написать export?
А лучше сделать не библиотеку, а .mqh файл в который напихать функции даже без класса и при компиляции будут браться только те которые нужны, к которым есть обращение из советника\индикатора.