my_first_adviser.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «my_first_adviser.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой торгового советника (Expert Advisor) для платформы MetaTrader 4 на языке MQL4. Советник автоматически анализирует ценовые данные, используя индикаторы RSI, скользящую среду (MA) и Bollinger Bands, и на основании полученных сигналов управляет торговыми позициями.
Продукт поддерживает открытие и закрытие ордеров, модификацию стоп-лоссов, а также расчёт оптимального объёма позиции с учётом настроенного параметра риска. Все торговые операции выполняются через стандартные торговые API MetaTrader 4.
Советник работает в рамках одного символа и использует магический номер для идентификации своих ордеров. Внутренняя логика содержит механизм защиты от одновременного наличия противоположных позиций.
Настройки программы
| Настройка | Описание |
|---|---|
| ?????? ?????????? ??? RSI (RSI_Per) | Период RSI — Период расчёта индикатора RSI |
| ?????? ?????????? ??? MA (MA_Per) | Период скользящей средней — Период расчёта скользящей средней |
| ?????? ?????????? ??? Bollinger Bands (Bands_Per) | Период Bollinger Bands — Период расчёта индикатора Bollinger Bands |
| ????? ???????????????/??????????????? (Band_Range) | Диапазон Bollinger Bands — Параметр, задающий диапазон/границу для Bollinger Bands |
| ??? ??????????? 0..3 (SmoothType) | Тип сглаживания — Тип сглаживания в диапазоне от 0 до 3 |
| ??????? ????? 0..1 (MaximumRisk) | Максимальный риск — Параметр риска в диапазоне от 0 до 1, влияющий на расчёт размера лота |
Поиск по коду файла
#include <stderror.mqh>
#include <stdlib.mqh>
#define MAGICMA 20070722
extern int RSI_Per = 16; //?????? ?????????? ??? RSI
extern int MA_Per = 6; //?????? ?????????? ??? MA
extern int Bands_Per = 60; //?????? ?????????? ??? Bollinger Bands
extern int Band_Range = 33; //????? ???????????????/???????????????
extern int SmoothType = 2; //??? ??????????? 0..3
extern double MaximumRisk =0.777; //??????? ????? 0..1
int init()
{
// код доступен только после оплаты
}
int deinit()
{
return(0);
}
int GetErrorDescription()
{
int err=GetLastError();
Print("error(",err,"): ",ErrorDescription(err));
return(0);
}
int CalculateCurrentOrders()
{
int buys=0,sells=0;
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
{
if(OrderType()==OP_BUY) buys++;
if(OrderType()==OP_SELL) sells++;
}
}
return (buys-sells);
}
double LotsOptimized(double Price)
{
double LotValue = MarketInfo(Symbol(),MODE_LOTSIZE); //????????? 1-?? ????
double FreeMargin = AccountFreeMargin(); //????????? ???????? ?? ?????
double Leverage = AccountLeverage(); //?????
double MinLot = MarketInfo(Symbol(),MODE_MINLOT); //??????????? ?????? ????
double MaxLot = MarketInfo(Symbol(),MODE_MAXLOT); //???????????? ?????? ????
double Res = (FreeMargin*Leverage*MaximumRisk)/(Price*LotValue);
if (NormalizeDouble(MinLot,1) > NormalizeDouble(Res,1)) Res=0;
if (NormalizeDouble(MaxLot,1) < NormalizeDouble(Res,1)) Res=MaxLot;
return (NormalizeDouble(Res,1));
}
double Culculate_SL(int Type, double Price, double Delta)
{
double StopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL); //?????????? ?????????? ???????
double Spred = MarketInfo(Symbol(),MODE_SPREAD); //??????? ????? ????? ??????? ? ???????
double StopLossMin = Price - Type*(Spred+StopLevel)*Point; //?????????? ?????????? ????-???? ?? ????
double StopLossCur = Price*(1-Type*Delta/2000);
StopLossMin = NormalizeDouble(StopLossMin,Digits);
StopLossCur = NormalizeDouble(StopLossCur,Digits);
if (StopLossMin<StopLossCur && Type==1)
StopLossCur = StopLossMin;
if (StopLossMin>StopLossCur && Type==-1)
StopLossCur=StopLossMin;
return (StopLossCur);
}
void OpenOrders(int Type, double Price, color ArrowColor, double Delta)
{
if (CalculateCurrentOrders()!=0) return;
double StopLoss = Culculate_SL(Type,Price,Delta);
int TypeOrder;
if (Type==1) TypeOrder = OP_BUY; else TypeOrder = OP_SELL;
double Lots = LotsOptimized(Price);
if (Lots>0)
{
Показано первые 50% кода (символов: 4236)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.