Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1618
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Можно так, без применения библиотек
Спасибо!
Сейчас рынок закрыт, TimeCurrent() не меняется. Проверь на крипте, она работает в выходные
Зачем делаете зависимо от тиков? Кнопка не должна от них зависеть.
Здравствуйте.
Кто встречал у какого-либо брокера архив котировок М1 для ndx(мт4).Хочу протестировать некоторые стратегии, больше 2 месяцев ни у кого нет.
Так понимаю, объёмы большие, поэтому брокеры не дают скачивать. Только основные пары.
Может у кого в папках осталась, на сервере? Хотя бы за 1 год.
Здравствуйте! Решил написать сюда...может кто откликнется!!! В CodeBase...давно это было...был выложен индикатор..ни названия не помню..ни автора. Суть в нем такая бала...в ручную устанавливаем горизонтальные линии..и он показывает сколько раз цена пересекла эту линию в одном и другом направлении..и показывал статистику по этой цене...Перелапатил два раза 66 страниц но так и не нашел...может кто помнит или есть у кого!!! Плиз нужен очень!!!
Не это:
Нет не он...тот для МТ4 был..Спасибо)))
Всем доброго времени суток!!!!
Подскажите пожалуйста пишу код сеточного советника принцип закрытия сетки простой все ордера с профитом на все ордера с убытком плюс профит от цены безубыточности.
Пытаюсь реализовать задумку чтобы при определенном уровне просадки усреднялись и закрывались только мин и макс ордера в сетке тем самым уменьшался уровень просадки.
Вот часть кода для открытия групповых ордеров:
if (CountTrade() < MaxOrders)
{
int order_type = FindLastOrderType();
if (order_type == OP_BUY)
{
price = FindLastOrderPrice(OP_BUY);
if(Ask<= price - (NormalizeDouble(ATR/ DivisorVolatility/Point, 0)*Point))
{
lastlot = NormalizeDouble(Lots()*MathPow( MultiplierParameter, OrdersTotal()), 2);
ticket = OrderSend(Symbol(), OP_BUY, lastlot, Ask, slip, 0, 0, "Групповой ордер", Magic, 0, Blue);
if (ticket < 1)
Print ("Ошибка ордера на покупку");
ModifyOrders(OP_BUY);
}
}
if (order_type == OP_SELL)
{
price = FindLastOrderPrice(OP_SELL);
if(Bid>= price + (NormalizeDouble(ATR/ DivisorVolatility/Point, 0)*Point))
{
lastlot = NormalizeDouble(Lots()*MathPow( MultiplierParameter, OrdersTotal()), 2);
ticket = OrderSend(Symbol(), OP_SELL, lastlot, Bid, slip, 0, 0, "Групповой ордер", Magic, 0, Red);
if (ticket < 1)
Print ("Ошибка ордера на продажу!");
ModifyOrders(OP_SELL);
}
}
}
Вот часть кода куда приходит команда на модификацию ордеров. Здесь я скрестил модификацию ордеров по принципу "Все ордера с прибылью и все ордера с убытком" и "Усреднение мин и макс ордеров".
//+----------------------------------------------------------------------------+
//| Модификация ордеров |
//+----------------------------------------------------------------------------+
void ModifyOrders(int otype)
{
double
BuyPriceMax = 0, BuyPriceMin = 0, BuyPriceMaxLot = 0, BuyPriceMinLot = 0,
SelPriceMin = 0, SelPriceMax = 0, SelPriceMinLot = 0, SelPriceMaxLot = 0;
int
BuyPriceMaxTic = 0, BuyPriceMinTic = 0, SelPriceMaxTic = 0, SelPriceMinTic = 0;
double
op = 0, lt = 0, order_lots = 0;
int
tk = 0, b = 0, s = 0;
price = 0;tp = 0;
for(int i = OrdersTotal() - 1; i >= 0; i--)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderMagicNumber() == Magic)
if(OrderSymbol() == Symbol() && OrderType() == otype)
{
op = NormalizeDouble(OrderOpenPrice(), Digits());
lt = NormalizeDouble(OrderLots(), 2);
tk = OrderTicket();
if(otype == OP_BUY)
{
b++;
if(op > BuyPriceMax || BuyPriceMax == 0)
{
BuyPriceMax = op;
BuyPriceMaxLot = lt;
BuyPriceMaxTic = tk;
}
if(op < BuyPriceMin || BuyPriceMin == 0)
{
BuyPriceMin = op;
BuyPriceMinLot = lt;
BuyPriceMinTic = tk;
}
}
if(otype == OP_SELL)
{
s++;
if(op > SelPriceMax || SelPriceMax == 0)
{
SelPriceMax = op;
SelPriceMaxLot = lt;
SelPriceMaxTic = tk;
}
if(op < SelPriceMin || SelPriceMin == 0)
{
SelPriceMin = op;
SelPriceMinLot = lt;
SelPriceMinTic = tk;
}
}
if (otype == OP_BUY || otype == OP_SELL)
{
price += OrderOpenPrice() * OrderLots();
order_lots += OrderLots();
}
}
//*************************************************************//
double AwerageBuyPrice = 0, AwerageSelPrice = 0, avg_price = 0;
if(b >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)
AwerageBuyPrice = NormalizeDouble((BuyPriceMax*BuyPriceMaxLot + BuyPriceMin*BuyPriceMinLot)/
(BuyPriceMaxLot + BuyPriceMinLot) + TakeProfitMinMaxOrder* Point(), Digits());
if(s >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)
AwerageSelPrice = NormalizeDouble((SelPriceMax * SelPriceMaxLot + SelPriceMin * SelPriceMinLot)/
(SelPriceMaxLot + SelPriceMinLot) - TakeProfitMinMaxOrder* Point(), Digits());
if (Drawdown < DrawdownClosingMinMaxOrder)
avg_price = NormalizeDouble(price / order_lots, Digits);
//*************************************************************//
for(int i = OrdersTotal() - 1; i >= 0; i--)
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
if(OrderMagicNumber() == Magic)
if(OrderSymbol() == Symbol())
{
op = NormalizeDouble(OrderOpenPrice(), Digits());
tp = NormalizeDouble(OrderTakeProfit(), Digits());
lt = NormalizeDouble(OrderLots(), 2);
tk = OrderTicket();
if(otype == OP_BUY && b >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)
{
if(tk == BuyPriceMaxTic || tk == BuyPriceMinTic)
if(Bid < AwerageBuyPrice && tp != AwerageBuyPrice)
if(!OrderModify(tk, op, OrderStopLoss(), AwerageBuyPrice, 0, clrRed))
Print("OrderModify error #", GetLastError());
if(tk != BuyPriceMaxTic && tk != BuyPriceMinTic && tp != 0)
if(!OrderModify(tk, op, 0, 0, 0, clrRed))
Print("OrderModify error #", GetLastError());
}
if(otype == OP_SELL && s >= 2 && Drawdown >= DrawdownClosingMinMaxOrder)
{
if(tk == SelPriceMaxTic || tk == SelPriceMinTic)
if(Ask > AwerageSelPrice && tp != AwerageSelPrice)
if(!OrderModify(tk, op, OrderStopLoss(), AwerageSelPrice, 0, clrRed))
Print("OrderModify error #", GetLastError());
if(tk != SelPriceMaxTic && tk != SelPriceMinTic && tp != 0)
if(!OrderModify(tk, op, 0, 0, 0, clrRed))
Print("OrderModify error #", GetLastError());
}
if (Drawdown < DrawdownClosingMinMaxOrder)
if (otype == OP_BUY) tp = NormalizeDouble (avg_price + TakeProfitGroupOrder*Point, Digits);
if (otype == OP_SELL) tp = NormalizeDouble (avg_price - TakeProfitGroupOrder*Point, Digits);
{
if(OrderModify(OrderTicket(), OrderOpenPrice(), 0, tp, 0))
Print("Ордера успешно модифицированы!");
else Print("Ошибка модификации ордеров!");
}
}
}
Результат следующий модификация групповых ордеров до допустимого уровня просадки происходит штатно после допустимого уровня просадки происходит усреднение и закрытие мин и макс происходит как задумано,
а вот дальше когда просадка уменьшилась новый тейкпрофит устанавливаться не в какую не хочет.
Вот журнал с кодами ошибок.
Помогите устранить эту ошибку!!!
Всем доброго времени суток!!!!
Воспользуйся
Воспользуйся
А можно по подробнее?