Добрый день.
Прошу написать советник для МТ5 по следующей стратегии.
Сигналы для открытия позиций по символам EURUSD и GBPUSD берутся после анализа поведения индекса доллара _DXY и кросса EURGBP.
Основные условия и правила оформил в виде кода для МТ4, мне показалось, что так будет информативнее и понятнее:
//+------------------------------------------------------------------+
//| Мультивалютный на индексе _DXY & кроссе.mq4 |
//| Copyright 2013, MetaQuotes Software Corp. |
//| http://www.mункцql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link "http://www.mункцql5.com"
#property version "1.00"
#property strict
extern string Symb_1 = "EURUSD";
extern double Lot_1 = 0.01;
extern int StopLoss_1 = 0;
extern int TakeProfit_1 = 0;
extern string Symb_2 = "GBPUSD";
extern double Lot_2 = 0.01;
extern int StopLoss_2 = 0;
extern int TakeProfit_2 = 0;
extern string Symb_3 = "_DXY";
extern string Symb_4 = "EURGBP";
extern ENUM_TIMEFRAMES Tf = PERIOD_H1;
extern int MAPeriod = 5;
extern ENUM_TIMEFRAMES Tf_1 = PERIOD_H1;
extern int MAPeriod_1 = 5;
extern int Shft_1 = 1;
extern int Magic = 1221;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
double sl_1=0, tp_1=0;
double sl_2=0, tp_2=0;
double ask_1=MarketInfo(Symb_1, MODE_ASK);
double bid_1=MarketInfo(Symb_1, MODE_BID);
double point_1=MarketInfo(Symb_1, MODE_POINT);
double ask_2=MarketInfo(Symb_2, MODE_ASK);
double bid_2=MarketInfo(Symb_2, MODE_BID);
double point_2=MarketInfo(Symb_2, MODE_POINT);
int bs=GetTradeSignal();
//-----
if(CountTrades(Symb_1)<1)
{
if (bs==1) {
if (StopLoss_1!=0) sl_1=bid_1-StopLoss_1*point_1;
if (TakeProfit_1!=0) tp_1=ask_1+TakeProfit_1*point_1;
OpenPosition(Symb_1, OP_BUY, sl_1, tp_1);
}
if (bs==-1) {
if (StopLoss_1!=0) sl_1=ask_1+StopLoss_1*point_1;
if (TakeProfit_1!=0) tp_1=bid_1-TakeProfit_1*point_1;
OpenPosition(Symb_1, OP_SELL, sl_1, tp_1);
}
}
//-----
if(CountTrades(Symb_2)<1)
{
if (bs==2) {
if (StopLoss_2!=0) sl_2=bid_2-StopLoss_2*point_2;
if (TakeProfit_2!=0) tp_2=ask_2+TakeProfit_2*point_2;
OpenPosition(Symb_2, OP_BUY, sl_1, tp_1);
}
if (bs==-2) {
if (StopLoss_2!=0) sl_1=ask_2+StopLoss_2*point_2;
if (TakeProfit_2!=0) tp_1=bid_2-TakeProfit_2*point_2;
OpenPosition(Symb_2, OP_SELL, sl_2, tp_2);
}
}
}
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу |
//+------------------------------------------------------------------+
int CountOrders(int type=-1,string symb=NULL){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==symb && OrderMagicNumber()==Magic){
if(OrderType()==type || type==-1)
count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int CountTrades(string symb){
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
if(OrderSymbol()==symb && OrderMagicNumber()==Magic)
{
if(OrderType()<2) count++;
}
}
}
return(count);
}
//+----------------------------------------------------------------------------+
//| Возвращает торговый сигнал: |
//| 2 - купить Symb_2 |
//| 1 - купить Symb_1 |
//| 0 - ничего не делать |
//| -1 - продать Symb_1 |
//| -2 - продать Symb_2 |
//| Параметры: |
//| sym - наименование инструмента ("" - текущий символ) |
//| tf - таймфрейм ( 0 - текущий таймфрейм) |
//+----------------------------------------------------------------------------+
int GetTradeSignal(string sym="", int tf=0) {
int bs=0;
if (sym=="") sym=Symbol();
double ma1=iMA(Symb_3,Tf,MAPeriod,0,MODE_EMA,PRICE_CLOSE,Shft_1);
double ma2=iMA(Symb_3,Tf,MAPeriod,0,MODE_EMA,PRICE_CLOSE,Shft_1+1);
double ma3=iMA(Symb_3,Tf,MAPeriod,0,MODE_EMA,PRICE_CLOSE,Shft_1+2);
double ma_1=iMA(Symb_4,Tf_1,MAPeriod_1,0,MODE_EMA,PRICE_CLOSE,Shft_1);
double ma_2=iMA(Symb_4,Tf_1,MAPeriod_1,0,MODE_EMA,PRICE_CLOSE,Shft_1+1);
double ma_3=iMA(Symb_4,Tf_1,MAPeriod_1,0,MODE_EMA,PRICE_CLOSE,Shft_1+2);
if((ma1<ma2 && ma1<ma3)&&(ma_1>ma_2 && ma_1>ma_3)) bs=1;//если индекс падает и кросс растет = покупаем "EURUSD"
if((ma1<ma2 && ma1<ma3)&&(ma_1<ma_2 && ma_1<ma_3)) bs=2;//если индекс падает и кросс падает = покупаем "GBPUSD"
if((ma1>ma2 && ma1>ma3)&&(ma_1>ma_2 && ma_1>ma_3)) bs=-2;//если индекс растет и кросс растет = продаем "GBPUSD"
if((ma1>ma2 && ma1>ma3)&&(ma_1<ma_2 && ma_1<ma_3)) bs=-1;//если индекс растет и кросс падает = продаем "EURUSD"
return(bs);
}
//+------------------------------------------------------------------+
В идеале конечно бы хотелось в советнике ещё иметь функцию усреднения позиций.
Спасибо.
Комментарии (12)
35 AM2 Сообщений: 16266 - Андрей
13 axe44 Сообщений: 1149 - Алек
16 ssg Автор Сообщений: 817
13 axe44 Сообщений: 1149 - Алек
Я с вами на брудершавт не пил, и катран на заваленке не катал.
Ты себе потыкай куда ни будь сидя на очке.
16 ssg Автор Сообщений: 817
Изменения следующие
1.Ограничить число пар списком в настройках.
2.Открытие первой позиции по сигналу индикатора SuperTrend — индикатор для
MetaTrader 5 отсюда www.mql5.com/ru/code/22611
3.Закрытие позиций одного символа при достижении
input double рrofit = 50; // Профит в валюте для одного символа.
4.Закрытие всех позиций советника при достижении
input double Profit = 50; // Профит в валюте для всех символов
советника.
16 ssg Автор Сообщений: 817
35 AM2 Сообщений: 16266 - Андрей
13 axe44 Сообщений: 1149 - Алек
16 ssg Автор Сообщений: 817
35 AM2 Сообщений: 16266 - Андрей
Буду изучать.
16 ssg Автор Сообщений: 817
16 ssg Автор Сообщений: 817
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий