Создание грааля

От lfyz1057, 3 августа в Беседка

Автор#1

Название стратегии: Солянка
Год выпуска: 2026
Сайт продажи: Нет
Валютные пары: Мальтивалюта
Таймфрейм: Подберем
Время торговли: Все кроме нон фарма
Описание:



всем привет
в эру ии каждый может стать разработчиком чем я и занялся, я уже написал для себя не грааль но уверенный советник заточенный на математической вероятности исхода события для этого я написал стратегию провел тест на 5 годах и просуммировал мах кол-во минусов в серии (7) и советник открывает сделку только после 5 минусов и рм и мм рассчитано на 6 входов с мартином работает, но приносит крайне мало до 15% в квартал

Сейчас же я нацелен на скальп советника с таким же математическим потенциалом по этому обращаюсь к единомышленникам поделиться своими стратими которые я бы смог уместить в советник и сделать корреляцию между стратегиями
всеми наработками я буду делиться в этой ветке
от вас нужно наработки и четкое описание пример как в этой статье /topic/25609-torgovaja-strategija-na-osnove-atr-poshagovoe-rukovodstvo-bez-sekretov/
(ее я уже скормил ии)

под себя у меня уже написан ии агент со всеми плагинами с гит хаба заточенный на трейдинг и мат анализ который сразу делает прогонку стратегии в сотнях вариациях в минуту (никакая толика информации не исчезнет)
но большинство статей мусор который не работает или вывозит только за счет мартина
(такое мы не любим)

по этому давайте вместе обьединимся и сделаем то что работает лучше всего, тесты я буду кидать сюда, а уже готовых советников в лс (напишите туда) тем кто реально внес хоть крупицу в общее дело

Изменено 3 августа пользователем lfyz1057

#2

lfyz1057 написал(а):

поделиться своими стратими которые я бы смог уместить в советник и сделать корреляцию между стратегиями


Привет! Оформите первый пост по шаблону, пожалуйста /topic/1578-vazhno-shablon-oformleniya-novyh-tem-v-razdele-torgovye-sistemy/

И есть вот такая задумка, код тоже был, но там бот криво определяет свечи, надо дорабатывать.

Таймфрейм М1

Торговый терминал MT5

время торговли: круглосуточно

торговый инструмент: cfd на индексы USTECH, DE40, US30. Изначально разработана для золота.

шаг торгового лота 0,01

EMA или SMA период 24, одна по максимумам свечей, вторая по минимумам, образуя канал

вход в покупки: минутный бар касается нижней границы канала (для касания добавить погрешность, необязательно пункт в пункт) и закрывается выше верхней границы канала. При этом скользящие средние, образующие канал, должны быть направлены вверх. Вход в сделку рыночным ордером после пробоя максимума сигнальной свечи.

вход в продажи: минутный бар касается верхней границы канала и закрывается ниже нижней границы канала. При этом скользящие средние, образующие канал, должны быть направлены вниз. Вход в сделку рыночным ордером после пробоя минимума сигнальной свечи.

тейк-профит: 1,5 ширины канала

стоп-лосс: цена пробивает минимум сигнального бара

msdjua17 eb3de7252110136a pngmsdjuur8 87df75bf9ab64875 png

Изменено 3 августа пользователем ju.vskv

Автор#3

ju.vskv написал(а):


Привет! Оформите первый пост по шаблону, пожалуйста /topic/1578-vazhno-shablon-oformleniya-novyh-tem-v-razdele-torgovye-sistemy/

И есть вот такая задумка, код тоже был, но там бот криво определяет свечи, надо дорабатывать.

Таймфрейм М1

Торговый терминал MT5

время торговли: круглосуточно

торговый инструмент: cfd на индексы USTECH, DE40, US30. Изначально разработана для золота.

шаг торгового лота 0,01

EMA или SMA период 24, одна по максимумам свечей, вторая по минимумам, образуя канал

вход в покупки: минутный бар касается нижней границы канала (для касания добавить погрешность, необязательно пункт в пункт) и закрывается выше верхней границы канала. При этом скользящие средние, образующие канал, должны быть направлены вверх. Вход в сделку рыночным ордером после пробоя максимума сигнальной свечи.

вход в продажи: минутный бар касается верхней границы канала и закрывается ниже нижней границы канала. При этом скользящие средние, образующие канал, должны быть направлены вниз. Вход в сделку рыночным ордером после пробоя минимума сигнальной свечи.

тейк-профит: 1,5 ширины канала

стоп-лосс: цена пробивает минимум сигнального бара


а можно код ? или более подробно потому что тут по скрину воссоздать стратегию нереально

#4

lfyz1057 написал(а):


а можно код ? или более подробно потому что тут по скрину воссоздать стратегию нереально

Спойлер

//+------------------------------------------------------------------+

//| Channel_Breakout_EA.mq5 |

//| Generated by GPT |

//| |

//+------------------------------------------------------------------+

#property copyright "GPT"

#property link ""

#property version "1.00"

//+------------------------------------------------------------------+

//| Входные параметры (их ты будешь менять в настройках) |

//+------------------------------------------------------------------+

input double LotSize = 0.01; // Размер лота

input int MAPeriod = 24; // Период MA

input int MAType = 1; // Тип MA (0=SMA, 1=EMA)

input int TouchDeviation = 5; // Допуск касания (в пунктах)

// Торговые фильтры

input bool UseTrailing = false; // Использовать трейлинг-стоп

input int TrailingStop = 30; // Уровень трейлинга (пункты)

//+------------------------------------------------------------------+

//| Глобальные переменные |

//+------------------------------------------------------------------+

double highMA[], lowMA[];

int maHighHandle, maLowHandle;

datetime lastSignalTime = 0; // Время последнего сигнала (чтобы не входить 2 раза на одной свече)

// Буферы для запоминания сигнальной свечи

double signalHigh = 0;

double signalLow = 0;

double channelWidthPoints = 0;

bool waitingForBreak = false;

int signalDirection = 0; // 1 = Buy, -1 = Sell

//+------------------------------------------------------------------+

//| Инициализация |

//+------------------------------------------------------------------+

int OnInit()

{

// Создаем индикаторы: MA по High и MA по Low

maHighHandle = iMA(_Symbol, Period, MAPeriod, 0, (ENUMMA_METHOD)MAType, PRICE_HIGH);

maLowHandle = iMA(_Symbol, Period, MAPeriod, 0, (ENUMMA_METHOD)MAType, PRICE_LOW);

if(maHighHandle == INVALID_HANDLE || maLowHandle == INVALID_HANDLE)

{

Print("Ошибка создания индикаторов!");

return(INIT_FAILED);

}

// Устанавливаем таймер для пересчета (на всякий случай)

EventSetTimer(5);

return(INIT_SUCCEEDED);

}

//+------------------------------------------------------------------+

//| Деинициализация |

//+------------------------------------------------------------------+

void OnDeinit(const int reason)

{

IndicatorRelease(maHighHandle);

IndicatorRelease(maLowHandle);

EventKillTimer();

}

//+------------------------------------------------------------------+

//| Таймер (для проверки ордеров) |

//+------------------------------------------------------------------+

void OnTimer()

{

// Если включен трейлинг, обновляем стопы

if(UseTrailing) CheckTrailingStop();

}

//+------------------------------------------------------------------+

//| Основная функция (на каждом тике) |

//+------------------------------------------------------------------+

void OnTick()

{

// Проверяем, есть ли уже открытые позиции (чтобы не открывать новые, если лимит 1)

if(PositionsTotal() >= 1)

{

// Если мы ждали пробоя, но позиция уже есть - сбрасываем ожидание

if(waitingForBreak) waitingForBreak = false;

return;

}

// Обновляем данные индикаторов

if(!UpdateIndicators()) return;

// Получаем текущие значения MA

double currentHighMA = highMA[1];

double currentLowMA = lowMA[1];

double prevHighMA = highMA[2];

double prevLowMA = lowMA[2];

// --- 1. Проверяем направление тренда (канала) ---

bool trendUp = (currentHighMA > prevHighMA && currentLowMA > prevLowMA);

bool trendDown = (currentHighMA < prevHighMA && currentLowMA < prevLowMA);

// --- 2. Получаем данные свечи (закрытой, индекс 1) ---

double closePrice = iClose(_Symbol, _Period, 1);

double highPrice = iHigh(_Symbol, _Period, 1);

double lowPrice = iLow(_Symbol, _Period, 1);

double openPrice = iOpen(_Symbol, _Period, 1);

double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);

double deviationInPrice = TouchDeviation * point;

// Проверяем, что мы не обрабатываем уже отработанную свечу (защита от повторных входов)

datetime currentCandleTime = iTime(_Symbol, _Period, 1);

if(lastSignalTime == currentCandleTime)

{

// Если уже есть ожидание пробоя, проверяем его

if(waitingForBreak)

{

CheckBreakEntry();

}

return;

}

// --- 3. Условия для ВХОДА (сигнальная свеча закрылась) ---

// Условие для BUY:

// 1) Минутный бар коснулся нижней границы (Low <= LowMA + погрешность)

// 2) Закрылся выше верхней границы (Close > HighMA)

// 3) Тренд вверх

bool buyCondition = false;

if(trendUp && closePrice > currentHighMA)

{

// Касание нижней границы (с погрешностью)

if(lowPrice <= currentLowMA + deviationInPrice)

{

buyCondition = true;

}

}

// Условие для SELL:

// 1) Коснулся верхней границы (High >= HighMA - погрешность)

// 2) Закрылся ниже нижней границы (Close < LowMA)

// 3) Тренд вниз

bool sellCondition = false;

if(trendDown && closePrice < currentLowMA)

{

// Касание верхней границы (с погрешностью)

if(highPrice >= currentHighMA - deviationInPrice)

{

sellCondition = true;

}

}

// --- 4. Если сигнал получен, запоминаем данные для пробоя ---

if(buyCondition)

{

signalHigh = highPrice; // Для BUY пробой максимума

signalLow = lowPrice;

channelWidthPoints = (currentHighMA - currentLowMA) / point; // Ширина канала в пунктах

if(channelWidthPoints < 0) channelWidthPoints = channelWidthPoints * (-1); // Модуль

signalDirection = 1;

waitingForBreak = true;

lastSignalTime = currentCandleTime;

Print("Сигнал BUY на свече ", TimeToString(currentCandleTime),

". High сигнала: ", signalHigh, " Ширина: ", channelWidthPoints);

}

else if(sellCondition)

{

signalHigh = highPrice;

signalLow = lowPrice; // Для SELL пробой минимума

channelWidthPoints = (currentHighMA - currentLowMA) / point;

if(channelWidthPoints < 0) channelWidthPoints = channelWidthPoints * (-1);

signalDirection = -1;

waitingForBreak = true;

lastSignalTime = currentCandleTime;

Print("Сигнал SELL на свече ", TimeToString(currentCandleTime),

". Low сигнала: ", signalLow, " Ширина: ", channelWidthPoints);

}

// --- 5. Проверяем пробой на текущей свече (если ожидаем) ---

if(waitingForBreak)

{

CheckBreakEntry();

}

}

//+------------------------------------------------------------------+

//| Проверка пробоя и вход в сделку |

//+------------------------------------------------------------------+

void CheckBreakEntry()

{

if(!waitingForBreak) return;

if(PositionsTotal() >= 1)

{

waitingForBreak = false;

return;

}

double currentBid = SymbolInfoDouble(_Symbol, SYMBOL_BID);

double currentAsk = SymbolInfoDouble(_Symbol, SYMBOL_ASK);

double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);

// Для BUY: пробой максимума сигнальной свечи вверх

if(signalDirection == 1)

{

if(currentAsk > signalHigh)

{

// Вход в BUY

double tpPrice = currentAsk + (channelWidthPoints 1.5 point);

double slPrice = signalLow; // Стоп на минимуме сигнальной свечи

OpenBuy(currentAsk, slPrice, tpPrice);

waitingForBreak = false;

Print("Вход BUY по пробою! TP: ", tpPrice, " SL: ", slPrice);

}

}

// Для SELL: пробой минимума сигнальной свечи вниз

else if(signalDirection == -1)

{

if(currentBid < signalLow)

{

double tpPrice = currentBid - (channelWidthPoints 1.5 point);

double slPrice = signalHigh; // Стоп на максимуме сигнальной свечи

OpenSell(currentBid, slPrice, tpPrice);

waitingForBreak = false;

Print("Вход SELL по пробою! TP: ", tpPrice, " SL: ", slPrice);

}

}

}

//+------------------------------------------------------------------+

//| Функции открытия ордеров |

//+------------------------------------------------------------------+

void OpenBuy(double price, double sl, double tp)

{

MqlTradeRequest request = {};

MqlTradeResult result = {};

request.action = TRADE_ACTION_DEAL;

request.symbol = _Symbol;

request.volume = LotSize;

request.type = ORDER_TYPE_BUY;

request.price = price;

request.sl = sl;

request.tp = tp;

request.deviation = 20;

request.magic = 123456;

request.comment = "Channel Break Buy";

if(!OrderSend(request, result))

Print("Ошибка BUY: ", result.retcode);

}

void OpenSell(double price, double sl, double tp)

{

MqlTradeRequest request = {};

MqlTradeResult result = {};

request.action = TRADE_ACTION_DEAL;

request.symbol = _Symbol;

request.volume = LotSize;

request.type = ORDER_TYPE_SELL;

request.price = price;

request.sl = sl;

request.tp = tp;

request.deviation = 20;

request.magic = 123456;

request.comment = "Channel Break Sell";

if(!OrderSend(request, result))

Print("Ошибка SELL: ", result.retcode);

}

//+------------------------------------------------------------------+

//| Обновление данных индикаторов |

//+------------------------------------------------------------------+

bool UpdateIndicators()

{

ArraySetAsSeries(highMA, true);

ArraySetAsSeries(lowMA, true);

// Копируем по 3 значения (для проверки текущего и предыдущего)

if(CopyBuffer(maHighHandle, 0, 0, 3, highMA) < 3) return false;

if(CopyBuffer(maLowHandle, 0, 0, 3, lowMA) < 3) return false;

return true;

}

//+------------------------------------------------------------------+

//| Трейлинг-стоп (опционально) |

//+------------------------------------------------------------------+

void CheckTrailingStop()

{

double point = SymbolInfoDouble(_Symbol, SYMBOL_POINT);

int total = PositionsTotal();

for(int i = total - 1; i >= 0; i--)

{

ulong ticket = PositionGetTicket(i);

if(ticket == 0) continue;

if(PositionSelectByTicket(ticket))

{

long type = PositionGetInteger(POSITION_TYPE);

double currentSL = PositionGetDouble(POSITION_SL);

double currentPrice = (type == POSITION_TYPE_BUY) ? SymbolInfoDouble(_Symbol, SYMBOL_BID) : SymbolInfoDouble(_Symbol, SYMBOL_ASK);

double openPrice = PositionGetDouble(POSITION_PRICE_OPEN);

double newSL = 0;

if(type == POSITION_TYPE_BUY)

{

newSL = currentPrice - TrailingStop * point;

if(newSL > currentSL && newSL > openPrice)

{

ModifyStopLoss(ticket, newSL);

}

}

else if(type == POSITION_TYPE_SELL)

{

newSL = currentPrice + TrailingStop * point;

if(newSL < currentSL || currentSL == 0)

{

if(newSL < openPrice)

{

ModifyStopLoss(ticket, newSL);

}

}

}

}

}

}

//+------------------------------------------------------------------+

//| Модификация стопа |

//+------------------------------------------------------------------+

void ModifyStopLoss(ulong ticket, double sl)

{

MqlTradeRequest request = {};

MqlTradeResult result = {};

request.action = TRADE_ACTION_SLTP;

request.position = ticket;

request.sl = sl;

request.deviation = 20;

if(!OrderSend(request, result))

Print("Ошибка модификации: ", result.retcode);

}

//+------------------------------------------------------------------+

Автор#5

ох и код ты скинул))) я так по приколу закинул в свой агент его)))) щас переделываю код с нуля

Автор#6
msj40alx ea17a1e0d7a9095c pngmsj4187p efa3bdbe71a97681 png

ну что сказать если честно что бы хотя бы до такого результата дойти пришлось потратить ночь со всеми фильтрами и добавлениями с личного опыта
сама страта не жизнедеятельна, разве что под опционы на битке на полимаркете там в плюс торгует, можно еще схематизировать и выловить самые прибыльные дни потому что есть большая кареляция по часа и дням и по сессиям но пока не жизнеятельна от слова совсем

Автор#7
msnc2ola e1b256e602db504a png

решил раз никто не дает идей пусть агент просканирует весь сайт и простестирует все стратегии все индикаторы и все наблюдения на сайте включая каждую ветку отдельно, сказать что я охренел это ничего Не сказать, за ночь мой ссд стал толще на 65гб и 50000+ тестов было проведено

#8

lfyz1057 написал(а):

за ночь мой ссд стал толще на 65гб и 50000+ тестов было проведено


Это супер-результат 😀 и что в итоге - всё хлам, ничего не работает?

#9

ju.vskv написал(а):


Это супер-результат 😀 и что в итоге - всё хлам, ничего не работает?

насмотренность работает... но агенту про насмотренность неведомо

Автор#10

ju.vskv написал(а):


Это супер-результат 😀 и что в итоге - всё хлам, ничего не работает?

на самом деле все имеет жизнеспособность
большинство действительно прибыльные но не пик, там есть самые топовые страты Mouse Tail VeryStrict, Sniper TP15. Green Red Candle Fib400
но результаты не очень но пока дорабатываю, задача переплюнуть мой алгоритм

msnl2snj c12b14359d781ff6 png

но все впереди, пару логик я уже взял для тестов на свое алгосе



Автор#11

Старик написал(а):

насмотренность работает... но агенту про насмотренность неведомо


как не работает если он и рассчитан запоминать каждую свечу и реакцию на нее и понимать какая логика сыграла в этом моменте

просто ии агента учишь этому сам или с гитхаба скачиваешь плагин backtrader и там еще пару плагинов есть для этого которые разворачиваешь на комп, но лучше под себя делать агента обучая самостоятельно,

Автор#12

уже 200$ на токены улетели за время анализа сайта)

Для публикации сообщений создайте учётную запись или авторизуйтесь

Перейти к списку тем
Форум · 2.0.20260627.0025