grid strategy 21112024_5363996961055735983.mq4
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «grid strategy 21112024_5363996961055735983.mq4» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Продукт представляет собой экспертного советника для платформы MetaTrader 4, реализующего сеточную торговую стратегию. Советник одновременно запускает несколько параллельных торговых подсистем, каждая из которых использует собственный подход к формированию сигналов на покупку и продажу. Каждая подсистема управляет своими позициями независимо, отслеживает результаты и может быть отключена при исчерпании депозита.
Настройки программы
| Настройка | Описание |
|---|---|
| Тейк Профит (iTakeProfit) | Тейк Профит — Фиксирует уровень прибыли в пунктах для управления открытыми позициями |
| Тип рассчета лота Процент или Значение (iTypeLots) | Тип рассчета лота Процент или Значение — Определяет метод расчёта размера лота: фиксированное значение или процент от доступного маржи |
| Начальный лот (iStartLots) | Начальный лот — Базовый размер лота для первых позиций в каждой подсистеме |
| Множитель лота (iMultiplier) | Множитель лота — Коэффициент, применяемый к размеру лота при наращивании позиций |
| Дистанция между позициями (iOrderStep) | Дистанция между позициями — Минимальное ценовое расстояние в пунктах между уровнями открытия новых позиций |
| Минимальный профит в пунктах (iMinimalProfit) | Минимальный профит в пунктах — Добавочный профит в пунктах, учитываемый при расчёте ценовых уровней для модификации ордеров |
| Проскальзывание (iSlippage) | Проскальзывание — Допустимое отклонение цены исполнения ордеров в пунктах |
Поиск по коду файла
#property version "24.110"
#property description "Разработка торговых роботов и автоматизация торговых процессов."
#property description "Уведомления о начале вебинара в телеграмм "
#property strict
/*
Название торгового робота?
*/
enum ENUM_TYPE_CALC_LOTS
{
Lots = 0, // Лоты
Percent = 1 // Процент
};
input int iTakeProfit = 300; // Тейк Профит
sinput ENUM_TYPE_CALC_LOTS iTypeLots = Lots; // Тип рассчета лота Процент или Значение
sinput double iStartLots = 0.01; // Начальный лот
input double iMultiplier = 2.0; // Множитель лота
input int iOrderStep = 290; // Дистанция между позициями
input int iMinimalProfit = 30; // Минимальный профит в пунктах
sinput int iSlippage = 30; // Проскальзывание
struct _str_
{
int magic;
string name;
double depo;
string rezult;
bool work; // Добавил переменную
datetime time_start;
datetime time_stop;
int deals;
void Print()
{
::Print(" =============================================== ");
/*
::Print(" time_stop " + DoubleToString(time_stop ,8));
::Print(" Сделок в день " + DoubleToString(time_start,8));
::Print(" Сделок в день " + DoubleToString(((int)time_stop - (int)time_start),8));
::Print(" Сделок в день " + DoubleToString(((int)time_stop - (int)time_start)/(60*60*24)/(deals==0?1:deals),8));
*/
::Print(" Позиций " + (string)deals);
::Print(" Результат " + rezult);
::Print(" Депозит " + DoubleToString(depo, 2));
::Print(" Magic " + (string)magic);
::Print(" Стратегия " + name);
::Print(" =============================================== ");
}
};
_str_ strategy[] =
{
{1, "MA", 500, "", true, NULL, NULL, 0},
{2, "BB", 500, "", true, NULL, NULL, 0},
{3, "Candle 1", 500, "", true, NULL, NULL, 0},
{4, "Candle 2", 500, "", true, NULL, NULL, 0},
{5, "Stochastic", 500, "", true, NULL, NULL, 0},
{6, "MACD", 500, "", true, NULL, NULL, 0},
{7, "RSI", 500, "", true, NULL, NULL, 0},
};
int OnInit()
{
// код доступен только после оплаты
}
void OnTick()
{
// код доступен только после оплаты
}
bool Strategy(int iIndex)
{
double
BuyPriceMax = 0, BuyPriceMin = 0, BuyPriceMaxLot = 0, BuyPriceMinLot = 0, BuyPriceSumm = 0, BuyLotsSumm = 0,
SelPriceMin = 0, SelPriceMax = 0, SelPriceMinLot = 0, SelPriceMaxLot = 0, SelPriceSumm = 0, SelLotsSumm = 0,
op = 0, lt = 0, sl = 0, tp = 0, profit = 0;
int b = 0, s = 0, ty = -1, tk = -1;
for(int i = OrdersTotal() - 1; i >= 0; i--)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(strategy[iIndex].work) // === Стратегии разрешено работать
if(OrderMagicNumber() == strategy[iIndex].magic)
if(OrderSymbol() == _Symbol)
{
op = OrderOpenPrice();
lt = OrderLots();
ty = OrderType();
if(ty == OP_BUY)
{
if(op > BuyPriceMax || BuyPriceMax == 0)
{
BuyPriceMax = op;
BuyPriceMaxLot = lt;
}
if(op < BuyPriceMin || BuyPriceMin == 0)
{
BuyPriceMin = op;
BuyPriceMinLot = lt;
}
b++;
BuyPriceSumm += op * lt;
BuyLotsSumm += lt;
}
if(ty == OP_SELL)
{
if(op > SelPriceMax || SelPriceMax == 0)
{
SelPriceMax = op;
SelPriceMaxLot = lt;
}
if(op < SelPriceMin || SelPriceMin == 0)
{
SelPriceMin = op;
SelPriceMinLot = lt;
}
s++;
SelPriceSumm += op * lt;
SelLotsSumm += lt;
}
}
double AwerageBuyPrice = 0, AwerageSelPrice = 0;
if(b >= 2 && BuyLotsSumm > 0)
AwerageBuyPrice = Nd((BuyPriceSumm / BuyLotsSumm) + iMinimalProfit * _Point);
if(s >= 2 && SelLotsSumm > 0)
AwerageSelPrice = Nd((SelPriceSumm / SelLotsSumm) + iMinimalProfit * _Point);
double BuyLot = 0, SelLot = 0;
if(b == 0)
BuyLot = iTypeLots == Percent ? LotPercent(iStartLots) : iStartLots;
else
BuyLot = BuyPriceMinLot * iMultiplier; // Добавить код пересчета с 0,01 * 1,5 =
if(s == 0)
SelLot = iTypeLots == Percent ? LotPercent(iStartLots) : iStartLots;
else
SelLot = SelPriceMaxLot * iMultiplier;
BuyLot = CheckVolumeValue(BuyLot);
SelLot = CheckVolumeValue(SelLot);
if(strategy[iIndex].work) // === Стратегии разрешено работать
{
if(Signal(strategy[iIndex].magic) == OP_BUY)
if((b == 0) || (b > 0 && (BuyPriceMin - Ask) >= (iOrderStep * _Point)))
if(OrderSend(_Symbol, OP_BUY, Nd(BuyLot, 2), Nd(Ask), iSlippage, 0, 0, "Grid", strategy[iIndex].magic, 0, clrGreen) < 0)
Print("OrderSend error OP_BUY #", GetLastError());
if(Signal(strategy[iIndex].magic) == OP_SELL)
if((s == 0) || (s > 0 && (Bid - SelPriceMax) >= (iOrderStep * _Point)))
if(OrderSend(_Symbol, OP_SELL, Nd(SelLot, 2), Nd(Bid), iSlippage, 0, 0, "Grid", strategy[iIndex].magic, 0, clrGreen) < 0)
Print("OrderSend error OP_SELL #", GetLastError());
}
for(int i = OrdersTotal() - 1; i >= 0; i--)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(strategy[iIndex].work) // === Стратегии разрешено работать
if(OrderMagicNumber() == strategy[iIndex].magic)
if(OrderSymbol() == _Symbol)
{
op = OrderOpenPrice();
lt = OrderLots();
ty = OrderType();
tk = OrderTicket();
sl = OrderStopLoss();
tp = OrderTakeProfit();
profit += OrderProfit() + OrderSwap() + OrderCommission();
if(ty == OP_BUY)
{
if(iTakeProfit > 0)
if(b == 1 && tp == 0)
if(!OrderModify(tk, Nd(op), Nd(sl), Nd(op + iTakeProfiПоказано первые 50% кода (символов: 8444)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.