test_group/ba/RusBafet_ma.mq5
super.admin be35c066ea convert
2025-05-30 16:31:23 +02:00

141 lines
9 KiB
MQL5

//+------------------------------------------------------------------+
//| RusBafetma.mq5 |
//| Copyright 2019, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
enum sell_or_buy1
{
up,//Снизу вверх (покупка)
down, // Сверху вниз (продажа)
all // Оба
};
input int ma_big=14;
input int ma_small=7;
//input int ma_trend=100;
//input bool trend=false;
input int pips=3;
input ENUM_TIMEFRAMES frame=PERIOD_M1;
input sell_or_buy1 sell_or_buy=all;
input double lot=0.01;
double mbig[],msmall[],mtrend[];
int mabig_handle,masmall_handle,matrend_handle,mid;
#include <Trade\Trade.mqh>
CTrade trade;
int OnInit()
{
//---
EventSetTimer(1);
mabig_handle=iMA(NULL,frame,ma_big,0,MODE_EMA,PRICE_CLOSE);
masmall_handle=iMA(NULL,frame,ma_small,0,MODE_EMA,PRICE_CLOSE);
// matrend_handle=iMA(NULL,frame,ma_trend,0,MODE_EMA,PRICE_CLOSE);
if(masmall_handle<0)
{
Print("Объект iMA не создан: MA_handle= ",INVALID_HANDLE);
Print("Ошибка исполнения = ",GetLastError());
//--- принудительное завершение программы
return(-1);
}
if(mabig_handle<0)
{
Print("Объект iMA не создан: MA_handle= ",INVALID_HANDLE);
Print("Ошибка исполнения = ",GetLastError());
//--- принудительное завершение программы
return(-1);
}
/*
if(matrend_handle<0)
{
Print("Объект iMA не создан: MA_handle= ",INVALID_HANDLE);
Print("Ошибка исполнения = ",GetLastError());
//--- принудительное завершение программы
return(-1);
}
*/
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTimer()
{
//---
if(CopyBuffer(mabig_handle,0,0,3,mbig)<=0)
return;
if(CopyBuffer(masmall_handle,0,0,3,msmall)<=0)
return;
// if(CopyBuffer(matrend_handle,0,0,3,mtrend)<=0)
// return;
// ArraySetAsSeries(mtrend,true);
ArraySetAsSeries(mbig,true);
ArraySetAsSeries(msmall,true);
long buy_id,sell_id;
ulong ticket;
//string type;
uint total=PositionsTotal();
int order_buy_c=0;
int order_sell_c=0;
//Alert(total);
//--- пройдем в цикле по всем ордерам
for(uint i=0;i<total;i++)
{
//--- получим тикет ордера по его позиции в списке
if((ticket=PositionGetTicket(i))>0)
{
//--- получим свойства ордера
// type =EnumToString(ENUM_ORDER_TYPE(OrderGetInteger(ORDER_TYPE)));
//--- подготовим и выведем информацию об ордере
// Alert(PositionGetInteger(POSITION_TYPE));
if(PositionGetString(POSITION_SYMBOL)==_Symbol)
{
if(PositionGetInteger(POSITION_TYPE)==1)
{
order_sell_c++;
sell_id=PositionGetInteger(POSITION_IDENTIFIER);
}
else
{
order_buy_c++;
buy_id=PositionGetInteger(POSITION_IDENTIFIER);
}
}
}
}
double Bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
if(mbig[1]>=msmall[1] && (msmall[0]-mbig[0])>pips*_Point && order_buy_c<1){trade.PositionClose(sell_id);trade.Buy(lot);}
//sell
if(mbig[1]<=msmall[1] && (mbig[0]-msmall[0])>pips*_Point && order_sell_c<1){trade.PositionClose(buy_id); trade.Sell(lot);}
}
//+------------------------------------------------------------------+