Trader's Assistant 2
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «trader's assistant 2.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Trader's Assistant 2 — торговый советник для MetaTrader 5, реализующий две независимые стратегии на основе технических индикаторов Stochastic и RSI. Каждая стратегия работает с собственными параметрами лота, коэффициента усреднения, направления торговли и уровней тейк-профита. Советник открывает рыночные ордера при получении сигналов от индикаторов или при нажатии пользовательских кнопок BUY/SELL на графике.
Система поддерживает сетную торговлю с усреднением: при движении цены в нужном направлении советник открывает дополнительные позиции с увеличенным лотом и корректирует тейк-профит до уровня безубытка. Две стратегии разделены по магическим номерам, что позволяет управлять ими независимо.
В настройках задаётся таймфрейм работы, допустимое проскальзывание, магические номера для идентификации ордеров и комментарии. Советник использует классы торгового API MetaTrader 5 для управления позициями и ордерами.
Настройки программы
| Настройка | Описание |
|---|---|
| period_work | Таймфрейм, на котором работает торговая система. |
| strategy1 | Включение или выключение стратегии 1. |
| Lot | Размер лота первого ордера в стратегии 1. |
| mult | Коэффициент увеличения лота при усреднении в стратегии 1. |
| dist | Направление торговли стратегии 1: только Buy, только Sell или оба направления. |
| step | Шаг в пунктах для открытия усредняющих ордеров в стратегии 1. |
| tpFirst | Тейк-профит первого ордера стратегии 1 в пунктах. |
| tpFromNull | Тейк-профит сетевых ордеров стратегии 1 от уровня безубытка в пунктах. |
| comm1 | Текстовый комментарий, присваиваемый ордерам стратегии 1. |
| strategy2 | Включение или выключение стратегии 2. |
| Lot2 | Размер лота первого ордера в стратегии 2. |
| mult2 | Коэффициент увеличения лота при усреднении в стратегии 2. |
| dist2 | Направление торговли стратегии 2: только Buy, только Sell или оба направления. |
| step2 | Шаг в пунктах для открытия усредняющих ордеров в стратегии 2. |
| tpFirst2 | Тейк-профит первого ордера стратегии 2 в пунктах. |
| tpFromNull2 | Тейк-профит сетевых ордеров стратегии 2 от уровня безубытка в пунктах. |
| comm2 | Текстовый комментарий, присваиваемый ордерам стратегии 2. |
| Slipage | Допустимое проскальзывание в пунктах при совершении торговых операций. |
| Magic | Магический номер для идентификации ордеров стратегии 1. |
| comm | Переключатель отображения комментариев на графике. |
Поиск по коду файла
#property version "1.00"
#include <Trade\PositionInfo.mqh>
#include <Trade\SymbolInfo.mqh>
#include<Trade\Trade.mqh>
#include <Trade\OrderInfo.mqh>
CPositionInfo m_position; // trade position object
CSymbolInfo m_symbol; // symbol info object
CHistoryOrderInfo m_history; //свойства ордеров из истории
COrderInfo order_info;
CTrade trade;
CTrade trade2;
enum dista
{
onlyBuy = 0, //Только Buy
onlySell = 1, //Только Sell
BuySell = 2 //Buy & Sell
};
input ENUM_TIMEFRAMES period_work = PERIOD_M30; //Таймфрейм торговой системы
input group "Стратегия 1"
input bool strategy1 = true;//Стратегия 1 (вкл/откл)
input double Lot = 0.01;//Лот первого ордера
input double mult = 1.4;//Коэффициент усреднения
input dista dist = 2;//Направление торговли
input int step = 200;//Шаг усреднения
input int tpFirst = 100;//Тейк профит первого ордера
input int tpFromNull = 100;//Тейк профит сетки (от безубытка)
input string comm1 = "Стратегия 1";//Комментарий к ордерам
int levelUp = 80; //Верхний уровень Stochastic
int levelDw = 20; //Нижний уровень Stochastic
int Kperiod = 5; //K-период (количество баров для расчетов)
int Dperiod = 3; //D-период (период первичного сглаживания)
int slowing = 3; //Окончательное сглаживание
ENUM_MA_METHOD ma_method = MODE_SMA; //Тип сглаживания
ENUM_STO_PRICE price_field = STO_LOWHIGH;//Способ расчета стохастика
input group "Стратегия 2"
input bool strategy2 = true;//Стратегия 2 (вкл/откл)
input double Lot2 = 0.1;//Лот первого ордера
input double mult2 = 1.4;//Коэффициент усреднения
input dista dist2 = 2;//Направление торговли
input int step2 = 200;//Шаг усреднения
input int tpFirst2 = 200;//Тейк профит первого ордера
input int tpFromNull2 = 200;//Тейк профит сетки (от безубытка)
input string comm2 = "Стратегия 2";//Комментарий к ордерам
int ma_period = 14; //Период усреднения RSI
ENUM_APPLIED_PRICE applied_price = PRICE_CLOSE;//Тип цены RSI
int levelUpRSI = 70; //Верхний уровень RSI
int levelDwRSI = 30; //Нижний уровень RSI
input group "Magic and slipage"
input int Slipage = 30;//Проскальзывание
input int Magic = 98541074;
input bool comm = true;//Отображать коммент
string InpName="But"; // Имя кнопки
ENUM_BASE_CORNER InpCorner=CORNER_RIGHT_UPPER; // Угол графика для привязки
string InpFont="Arial"; // Шрифт
int InpFontSize=12; // Размер шрифта
color InpColor=clrBlack; // Цвет текста
color InpBackColor=C'236,233,216'; // Цвет фона
color InpBorderColor=clrNONE; // Цвет границы
bool InpState=false; // Нажата/Отжата
bool InpBack=false; // Объект на заднем плане
bool InpSelection=false; // Выделить для перемещений
bool InpHidden=true; // Скрыт в списке объектов
long InpZOrder=0; // Приоритет на нажатие мышью
int handleStoch, handleRSI;
double stochBuffer[], rsiBuffer[];
int LotDigitsPair = 0;
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
ObjectsDeleteAll(0,InpName);
Comment("");
}
void OnTick()
{
// код доступен только после оплаты
}
bool f_ButtonPressured(string na)//Функция определяет находится ли указанная кнопка в нажатом состоянии. na - имя кнопки
{
bool bol_Y = ObjectGetInteger(0, na, OBJPROP_STATE, true);
if(bol_Y)
return(true);
return(false);
}
bool ButtonCreate(const long chart_ID=0, // ID графика
const string name="Button", // имя кнопки
const int sub_window=0, // номер подокна
const int x=0, // координата по оси X
const int y=0, // координата по оси Y
const int width=50, // ширина кнопки
const int height=18, // высота кнопки
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // угол графика для привязки
const string text="Button", // текст
const string font="Arial", // шрифт
const int font_size=10, // размер шрифта
const color clr=clrBlack, // цвет текста
const color back_clr=C'236,233,216', // цвет фона
const color border_clr=clrNONE, // цвет границы
const bool state=false, // нажата/отжата
const bool back=false, // на заднем плане
const bool selection=false, // выделить для перемещений
const bool hidden=true, // скрыт в списке объектов
const long z_order=0) // приоритет на нажатие мышью
{
ResetLastError();
if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0))
{
Print(__FUNCTION__,
": не удалось создать кнопку! Код ошибки = ",GetLastError());
return(false);
}
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
ObjectSetInteger(chart_ID,name,OBJPROP_STATE,state);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order);
return(true);
}
double ParamOpenLastPos(ENUM_ORDER_TYPE type,string simb, int mag, int param)
{
int count=0,pr=0;
double p=0;
datetime t=0;
datetime time = -1;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(order_info.SelectByIndex(i)) // selects the position by index for further access to its properties
{
if((order_info.Symbol()== simb || simb =="") && order_info.Magic()==mag && (order_info.OrderType() ==type || type < 0))
{
if(t < order_info.TimeSetup())
{
if(param == 1)
p = order_info.PriceOpen();
if(param == 2)
p = order_info.VolumeInitial();
if(param == 3)
time = order_info.TimeSetup();
t=order_info.TimeSetup();
}
}
}
}
if(param == 3)
return(iBarShift(_Symbol,PERIOD_CURRENT,time));
return(p);
}
bool DeleteOrders(ENUM_ORDER_TYPE type, string simbol, int magic)
{
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(order_info.SelectByIndex(i))
{
if((order_info.Symbol()==simbol || simbol =="") && order_info.Magic()==magic)
{
if(order_info.OrderType() ==type || type < 0)
{
if(trade.OrderDelete(order_info.Ticket()))
return(true);
}
}
}
}
return(false);
}
int CalculateOrders(ENUM_ORDER_TYPE type, string simbol, int magic)
{
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(order_info.SelectByIndex(i))
{
if((order_info.Symbol()==simbol || simbol =="") && order_info.Magic()==magic)
{
if(order_info.OrderType() ==type || type < 0)
count++;
}
}
}
return(count);
}
void rynochnieOrderaRSI(double rsi1, double rsi2, bool buy, bool sell)
{
double ask = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
double bid = SymbolInfoDouble(_Symbol,SYMBOL_BID);
if(buy)
{
if(dist == 0 || dist == 2)
Показано первые 50% кода (символов: 16942)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.