Добрый день
Можете написать советник по такой теме.
1. Советник открывает 2 ордера, но главное чтоб ордер Sell было выше Buy
2. После чего советник выставляет стоп лосс (на выбор) маленький
3. После срабатывания стоп лосса выставлялся ордер снова Sell
4. Должно примерно получиться такая картина
5. После чего все закрывалось по профиту
Суть идее в том что советник будет открывать два ордера Sell выше Buy и по задеванию стопа, будет открывать снова ордер тот который закрылся, ордер Buy будет покрывать все убытки Sell по закрытию стопа, будет создаваться коридор, после того как тред отгуляет, и цена будет делать откат все закрывается по профиту.
— Либо лучше сделать так
1. Открываются два ордера Buy 0.05 и Sell 0.05
2. После чего один закрывается по стопу
3. Открывается другой ордер Sell но уже 0.05 а уже 0.01
Потом закрывается по профиту, тем самым ордер buy окупает все закрытые ордера по стопу Sell.
— Можно сделать с мартином
Ордер который закрывался по стопу увеличивался
Настройки советник:
столосс
безубыток (если ордер закрывался по безубытку то снова открывался такой же ордер)
закрытие по профиту
если возможно добавить мартин
— Вот советник для ознакомления с логикой, он откусывает позиций и выставляет снова ордер, но тем самым риски большие, если у цены долгий тренд
DVA_Martin_9.mq4 (19 Kb)
Комментарии (16)
35 AM2 Сообщений: 16665 - Андрей
8 deb555 Автор Сообщений: 69
35 AM2 Сообщений: 16665 - Андрей
8 deb555 Автор Сообщений: 69
мне интересен вариант у которого средства все время выше баланса
35 AM2 Сообщений: 16665 - Андрей
Правда, если бы Вы зафиксировались, то риск бы не уменьшился. Но когда эквити выше дэпо, спится спокойнее. Редактирован: 15 апреля 2022, 01:37
8 kvashnin007 Сообщений: 757 - Андрей
35 AM2 Сообщений: 16665 - Андрей
8 deb555 Автор Сообщений: 69
35 AM2 Сообщений: 16665 - Андрей
13 Pesha Сообщений: 222 - ¯\_(ツ)_/¯
8 deb555 Автор Сообщений: 69
www.opentraders.ru/downloads/2000/
35 AM2 Сообщений: 16665 - Андрей
8 deb555 Автор Сообщений: 69
35 AM2 Сообщений: 16665 - Андрей
1. Вот пила 1 без мартина
2. А вот с мартином
В первом Buy и Sell
Во втором выход Sell и Buy
8 deb555 Автор Сообщений: 69
<code>//+------------------------------------------------------------------+ //| DVA_Martin_9.mq4 | //| Copyright 2016, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict input int TakeProfit = 326; // профит input double K_TP = 0.8; // Коэффициент увеличкения ТР input int Step = 285; // шаг первого ордера input int Delta = -13; // добавка к шагу со второго ордера, увеличивает расстояние шага на "дельта" от предыдущего input double Lot = 0.01;// первый лот открытия input double MaximalLot = 0.6; // максимальный лот, который мы разрешаем input int DotLot = 2 ; // 0-лоты 1, 1-лоты 0.1, 2-лоты 0.01 input int MaxTrades = 8; // максимальное количество ордеров одного направления input double MultiplicatorLot = 2.1; // умножаем последующие ордера input int Magic = 333; // индивидуальный номер, по которому советник видет свои сделки input int Slippage = 100; // допустимое проскальзывание на новостях в пунктах string Expert = "Martin_9"; //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { // Пременные для хранения собранной информации int b=0,s=0; double BuyMinPrice=0,SelMaxPrice=0,BuyMinLot=0,SelMaxLot=0; double LotBuy=0; double LotSel=0; for(int i=OrdersTotal()-1; i>=0; i--) if(OrderSelect(i,SELECT_BY_POS)) if(OrderSymbol()==Symbol()) if(OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY) { b++; // Считаем открытые ордера на покупку if(OrderOpenPrice()<BuyMinPrice || BuyMinPrice==0) // Находим нижний бай ордер { BuyMinPrice=OrderOpenPrice(); // Запоминаем его цену BuyMinLot=OrderLots(); // Запоминаем его лот } } if(OrderType()==OP_SELL) { s++; // Считаем открытые ордера на продажу if(OrderOpenPrice()>SelMaxPrice) // Находим верхний сел ордер { SelMaxPrice=OrderOpenPrice(); // Запоминаем его цену SelMaxLot=OrderLots(); // Запоминаем его лот } } } // Расчитываем лоты if(b==0) // Если нет ордеров используем лот из настроек LotBuy=Lot; else // Иначе используем свой расчет LotBuy=BuyMinLot*MultiplicatorLot; if(LotBuy>MaximalLot) LotBuy=MaximalLot;//ограничиваем по максимальному лоту LotBuy=NormalizeDouble(LotBuy, DotLot); if(s==0) LotSel=Lot; // Если нет ордеров используем лот из настроек else LotSel=SelMaxLot*MultiplicatorLot; // Иначе используем свой расчет if(LotSel>MaximalLot) LotSel=MaximalLot;//ограничиваем по максимальному лоту LotSel=NormalizeDouble(LotSel, DotLot); if(b==0 || (b>0 && b<= MaxTrades && Ask<NormalizeDouble(BuyMinPrice-(Step+Delta*b)*Point(),Digits()))) // Если ордеров нет откроем ордер // Если ордера есть и условие выполнено откроем ордер иным лотом { if(OrderSend(Symbol(),OP_BUY,LotBuy,Ask,Slippage,0,0,Expert + "-" + (string)b + "-" + (string)Step + "-",Magic,0,clrBlue)<0) // Если ордер не открылся Print("Error N ",GetLastError()); // Сообщим об ошибке } if(s==0 || (s>0 && s<= MaxTrades && Bid>NormalizeDouble(SelMaxPrice+(Step+Delta*s)*Point(),Digits())))// Если ордеров нет откроем ордер // Если ордера есть и условие выполнено откроем ордер иным лотом { if(OrderSend(Symbol(),OP_SELL,LotSel,Bid,Slippage,0,0,Expert + "-" + (string)s + "-" + (string)Step + "-",Magic,0,clrRed)<0) // Если ордер не открылся Print("Error N ",GetLastError()); // Сообщим об ошибке } // посчитаем математические формулы средних цен double BuyAwerage=0,SelAwerage=0,BuyPrice=0,SelPrice=0,BuyLot=0,SelLot=0; for(int i=OrdersTotal()-1; i>=0; i--) if(OrderSelect(i,SELECT_BY_POS)) if(OrderSymbol()==Symbol()) if(OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY) { BuyPrice+=OrderOpenPrice()*OrderLots(); // добавить к переменной BuyPrice Цена оредра 1 * лот ордера 1 BuyLot+=OrderLots(); // суммируем лоты } if(OrderType()==OP_SELL) { SelPrice+=OrderOpenPrice()*OrderLots(); // добавить к переменной SelPrice Цена оредра 1 * лот ордера 1 SelLot+=OrderLots(); // суммируем лоты } } double TP=TakeProfit*MathPow(K_TP, b)*Point; BuyAwerage=NormalizeDouble(BuyPrice/BuyLot+TP,Digits()); // Произведем расчет средней цены SelAwerage=NormalizeDouble(SelPrice/SelLot-TP,Digits()); // Произведем расчет средней цены // --- for(int i=OrdersTotal()-1; i>=0; i--) if(OrderSelect(i,SELECT_BY_POS)) if(OrderSymbol()==Symbol()) if(OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY) { if(b==1) // Если ордер один и у него нет тейк профита if(OrderTakeProfit()==0) if(OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(OrderOpenPrice()+TakeProfit*Point(),Digits()),0,clrGreen)==false)// Добавим тейк а в случае ошибки сообщим трейдеру Print("Error N ",GetLastError()); if(b>1)// Если ордеров больше 1 if(OrderTakeProfit()!=BuyAwerage) // И тейк не равен требуемой цене //????????????????????????????????????? if(Ask<BuyAwerage)// Условия торговли соблюдены if(OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(BuyAwerage,Digits()),0,clrGreen)==false) // Модифицируем ордер или сообщим об ошибке Print("Error N ",GetLastError()); } if(OrderType()==OP_SELL) { if(s==1) // Если ордер один и у него нет тейк профита if(OrderTakeProfit()==0) if(OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(OrderOpenPrice()-TakeProfit*Point(),Digits()),0,clrGreen)==false)// Добавим тейк а в случае ошибки сообщим трейдеру Print("Error N ",GetLastError()); if(s>1)// Если ордеров больше 1 if(OrderTakeProfit()!=SelAwerage) // И тейк не равен требуемой цене if(Bid>SelAwerage)// Условия торговли соблюдены if(OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(SelAwerage,Digits()),0,clrGreen)==false) // Модифицируем ордер или сообщим об ошибке Print("Error N ",GetLastError()); } } } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ </code>Редактирован: 15 апреля 2022, 01:518 kvashnin007 Сообщений: 757 - Андрей
Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий