0
Дак Вы в цикле модификации ордеров так не чего и не сделали. Как он передвигал ТР один раз так и осталось.
Нужно что б он передвигал ТР у отрицательного ордера после каждого положительно закрытого ордера.
Это как тралят SL за ценой у плюсовых ордеров тут то же самое только тралим ТП у отрицательных ордеров и после того как противоложный ордер закрылся с положительным ТП.
avatar

droba

  • 20 мая 2021, 16:38
0
Оживлённого кода.
А вот торговля по этой системе, ордера открывает советник, модификация в ручную.

История с 14 мая до сегодняшнего дня.
avatar

droba

  • 20 мая 2021, 09:18
0
Да так оно и будет они разбегаются по крайним точкам ценового диапазона. Там будем думать дальше.
А исходник можно?
avatar

droba

  • 20 мая 2021, 08:35
0
www.opentraders.ru/downloads/3002/ — это Ваш советник на пробой предыдущей свечи.
К нему нужно добавить модификацию ордеров. Как пример, в рынке два разнонаправленных ордера (без SL) один закрывается по ТП, а другой модифицируется, т.е. ТП переносится в отрицательную зону на 30% от прибыли закрывшегося ордера и цикл работает до тех пор пока не закроется убыточный ордер. Скажем так BUY мы модифицируем с отрицательным ТП, а SELL открывается снова после закрытия по ТП. В общем смысл стратегии — сначала забираем прибыль, а потом рассчитываем SL от этой прибыли в размере 30%. Процент вынести в переменные советника.
avatar

droba

  • 20 мая 2021, 05:32
0
//+------------------------------------------------------------------+
//| NEW_Stochastic.mq4 |
//| Copyright 2019, MetaQuotes Software Corp. |
//| www.mql5.com |
//+------------------------------------------------------------------+
#property copyright «Copyright 2019, MetaQuotes Software Corp.»
#property link «www.mql5.com»
#property version «1.00»
#property strict
//+------------------------------------------------------------------+
//input double lot= 0.01;
input double RiskPercent = 2;
input double K_TP = 3; // Соотношение SL к ПРОФИТ
input double K_PR_B = 3; // Процент перемещения SL от ТР Buy
input double K_PR_S = 5; // Процент перемещения SL от ТР Sell
extern bool _modifi = true; // вкл. модификацию
input int magic = 20201218;

//+------------------------------------------------------------------+
//| Расчет риска в % от величины SL |
//+------------------------------------------------------------------+
double CalculateLot(double _stop) {
double loss = _stop / MarketInfo(_Symbol, MODE_TICKSIZE) * MarketInfo(_Symbol, MODE_TICKVALUE);
double lots = AccountFreeMargin() * RiskPercent / 100 / loss;
return (NormalizeDouble(MathMin(MarketInfo(_Symbol, MODE_MAXLOT), MathMax(MarketInfo(_Symbol, MODE_MINLOT), lots)), 2));
}
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу |
//+------------------------------------------------------------------+
int CountOrders(int type=-1)
{
int count=0;
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
{
if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
{
if(OrderType()==type || type==-1)
count++;
}
}
}
return(count);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
if (_modifi)
{ _Modifi();
}

int r=0;
double stoch_1=iStochastic(_Symbol, _Period,21,2,3,MODE_SMA,1,MODE_MAIN,1);
double stoch_2=iStochastic(_Symbol, _Period,21,2,3,MODE_SMA,1,MODE_MAIN,2);
double ATR=NormalizeDouble(iATR(NULL,PERIOD_D1,21,1), Digits);
double TP=ATR*100000;
CountOrders();
if(stoch_1 > 20 && stoch_2 < 20 && NormalizeDouble(iHigh(Symbol(),0,1), Digits) < Ask && CountOrders(OP_BUY) < 1) {
r = OrderSend(Symbol(),
OP_BUY,
//NormalizeDouble(lot, 2),
CalculateLot(Ask — (NormalizeDouble(Ask — 0.3*TP*Point, Digits))),
Ask,
30,
/*NormalizeDouble(Ask — 0.3*TP*Point, Digits)*/0, //SL
NormalizeDouble(Ask + K_TP*TP*Point, Digits), //TP
«STOCHASTIC»,
magic,
0,
Blue); // BUY
}
else if(stoch_1 < 80 && stoch_2 > 80 && NormalizeDouble(iLow(Symbol(),0,1), Digits) > Bid && CountOrders(OP_SELL) < 1) {
r = OrderSend(Symbol(),
OP_SELL,
//NormalizeDouble(lot, 2),
CalculateLot((NormalizeDouble(Bid + 0.3*TP*Point, Digits)) — Bid),
Bid,
30,
/* NormalizeDouble(Bid + 0.3*TP*Point, Digits)*/0, //SL
NormalizeDouble(Bid — K_TP*TP*Point, Digits), //TP
«STOCHASTIC»,
magic,
0,
Red); // SELL
}
}
//+------------------------------------------------------------------+
void _Modifi(){
int i;
bool m;
double _profitByu=0.0, _profitSell=0.0;
for (i=OrdersHistoryTotal()-1; i>=0; i--){
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){
if (OrderType()==OP_BUY && OrderProfit()>0)
if (OrderProfit()>0) _profitByu += NormalizeDouble(OrderProfit()*Point*K_PR_S,Digits);
if (OrderProfit() < 0) _profitByu = 0;
if (OrderType()==OP_SELL && OrderProfit()>0)
if (OrderProfit()>0) _profitSell += NormalizeDouble(OrderProfit()*Point*K_PR_B,Digits);
if (OrderProfit() < 0) _profitSell = 0;
{
Comment(«Посчитаем профит:» ,"\n",«Buy = »,_profitByu,
" Sell = ", _profitSell);
}
for (i=OrdersTotal()-1; i>=0; i--){
if(OrderSelect(i,SELECT_BY_POS)){
if (OrderSymbol()==Symbol() && OrderMagicNumber()==magic){

if (OrderType()==OP_BUY && _profitSell > 0){
m = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),
NormalizeDouble(OrderOpenPrice()-_profitSell ,Digits),OrderExpiration(),CLR_NONE);
}
if (OrderType()==OP_SELL && _profitByu > 0){
m = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),
NormalizeDouble(OrderOpenPrice()+_profitByu ,Digits),OrderExpiration(),CLR_NONE);
}
}
}
}
}
}
return;
}
avatar

droba

  • 20 мая 2021, 05:14
0
Всё работает как часики. Выражаю глубокую благодарность за оперативную и грамотную работу.
avatar

droba

  • 7 мая 2021, 06:37
0
Все работает. Спасибо. Андрей делаешь доброе дело.
avatar

droba

  • 8 апреля 2021, 07:57
0
Андрей, символ я добавил. А как сделать, чтоб брякнул только один раз (а то брякает на каждом тике)
и еще брякает когда ордеров нет, а если хоть один ордер есть он не брякает.
avatar

droba

  • 7 апреля 2021, 09:54
0
Информация в Алерте: Закрытие ордера с профитом: — «ПРОФИТ 20$, GBPUSD» Я просил еще вот это — GBPUSD, а в алерте этого нет. И работает не правильно когда ордеров нет советник брякает на каждом тике, а когда есть ордера алерт не работает.
avatar

droba

  • 7 апреля 2021, 05:43
0
А что дорабатывать не будем да?
avatar

droba

  • 6 апреля 2021, 05:44
0
А где символ?
Когда ордеров нет брякает на каждом тике, а когда ордера открыты АЛЕРТ не работает.
avatar

droba

  • 31 марта 2021, 07:25
0
Если можно, то будет очень здорово.
avatar

droba

  • 25 марта 2021, 16:44
0
zakaz.opentraders.ru/58440.html — это здесь
avatar

droba

  • 25 марта 2021, 16:36
0
Ребята ищу поручителя на доработку советника.
В советник добавляем Алерт. Думаю полезная штука.
avatar

droba

  • 25 марта 2021, 06:09
0
Если можно сделать и по ТР и по тралу. Трал начинается когда ордер в прибыли.
avatar

droba

  • 25 марта 2021, 06:02
0
Андрей, спасибо, всё работает. КЛАСС!!!
avatar

droba

  • 16 ноября 2020, 08:54
0
Хочу заметить при написании советника, в рынке может быть максимально только два разнонаправленных ордера (Buy и Sell)
avatar

droba

  • 13 ноября 2020, 14:51
0
Ребята ищу поручителя для пробойного советника.
avatar

droba

  • 13 ноября 2020, 07:51
0
К сожалению советник мертвый на каждом тике выставляет SellStop и удаляет. Зачем в переменных советника стоят ТР и SL, они должны рассчитываться в коде советника.
avatar

droba

  • 29 октября 2020, 10:21