berezhnuy:
Вот у меня такой простенький трал
Все отлично работает, но проблема в том что он тралит только при открытии новой свечи,а не в реальном времени. Как сделать чтоб он тралил влюбой момент временни?Функцию трала надо запускать до контроля формирования нового бара
Как это в коде выглядит, подскажите пожалуйста
berezhnuy:
Как это в коде выглядит, подскажите пожалуйста
Дак тут нет телепатов, выкладывайте весь код, тогда подскажут как это в коде выглядит.
Как это в коде выглядит, подскажите пожалуйста
berezhnuy:
Как это в коде выглядит, подскажите пожалуйста
Как это в коде выглядит, подскажите пожалуйста
Простейший вариант
int start() { Tral(); if (!NevBar()) return(0); // Дальнейшая обработка return(0); }
vitali_yv:
Дак тут нет телепатов, выкладывайте весь код, тогда подскажут как это в коде выглядит.
Дак тут нет телепатов, выкладывайте весь код, тогда подскажут как это в коде выглядит.
extern int Magic=5675; extern int Orders =1; extern int StopLoss=0; extern int TakeProfit=0; extern string ______= "Параметры блока MoneyManagement"; extern double Lots = 0.1; extern bool MoneyManagement=false; extern int MarginPercent=3; extern int TrailingStop=50; //---------------------------------- double SL,TP; int ticket; double lots; static int prevtime = 0; //-- Подключаемые модули -- #include <stderror.mqh> #include <stdlib.mqh> //+=================================================================================+ //| expert initialization function | //+=================================================================================+ int init() { //---- //---- return(0); } //+=================================================================================+ //| expert deinitialization function | //+=================================================================================+ int deinit() { //---- //---- return(0); } //+=================================================================================+ //| expert start function | //+=================================================================================+ int start() { if (Time[0] == prevtime) return(0); // Бар прежний, а следовательно выходим prevtime = Time[0]; // Свежий бар, запоминаем время //+=================================================================================+ // Объявляем переменные int total, cnt; int err; // Вычисляем начальные параметры индикаторов для поиска условий входа total=OrdersTotal(); Comment( LotsCounting() ); //+=================================================================================+ // Проверка средств if(AccountFreeMargin()<(1000*Lots)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } //=========================== Открытие позиций ===================================+ //+=================================================================================+ // Проверка условий для совершения сделки бай if( Сигнал ) { SL=0;TP=0; if(StopLoss>0) SL=Bid - StopLoss* Point; // StopLoss (цена) if(TakeProfit>0) TP=Bid + TakeProfit*Point; // TakeProfit (цена) lots=LotsCounting(); ticket=OrderSend(Symbol(),OP_BUYSTOP,lots,pp,3,SL,TP,"Покупаем- хи-хи ",Magic,0,Magenta); if(ticket > 0); if(ticket < 0) { Print("Ошибка открытия ордера BUY #", GetLastError()); Sleep(10000); prevtime = Time[1]; return (0); } } } //======================== конец блока открытия позиций ============================+ //+================================= TrailingStop ==================================+ for ( int z = OrdersTotal() - 1; z >= 0; z -- ) { if (OrderSelect(z, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if(OrderType() == OP_BUY) { if(Bid-OrderOpenPrice()>Point*TrailingStop) { if(OrderStopLoss()<Bid-Point*TrailingStop) { OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Blue); } } } } // Symbol() } // select } //total //+================================= TrailingStop ==================================+ return(0); } //ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ Конец функции int start() ЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖЖ //+=================================================================================+ //==================================== Блок ММ =====================================+ double LotsCounting() { double lots=Lots; if (MoneyManagement) { double lotsize=MarketInfo(Symbol(),MODE_LOTSIZE); double freemargin=AccountFreeMargin(); lots=0; if (lotsize>0) lots=NormalizeDouble((MarginPercent*freemargin/lotsize),2); Comment(NormalizeDouble((MarginPercent*freemargin/lotsize),2)); } if (lots>5) lots=4.9; if (lots<0.1) lots=0.1;return (lots); }
Вот весь код
if (Time[0] == prevtime) return(0); // Бар прежний, а следовательно выходим
Перенесите блок трайлингстопа выше строк:
// вот сюда if (Time[0] == prevtime) return(0); // Бар прежний, а следовательно выходим prevtime = Time[0]; // Свежий бар, запоминаем время
А как теперь сделать чтоб он тралил с шагом? к примеру 50 пнуктов
Нужно задействовать другой трал, - такой, где предусмотрен шаг .
Например. Старый трал удалить.
Во внешних параметрах задать (вместо extern int TrailingStop=50;) :
extern string _____= "Параметры функции ТРЕЙЛИНГ СТОП"; extern bool UseTrailing = true;//Выключатель трейлинг стопа extern int MinProfit = 150; //порог включения трейлин стопа extern int TrailingStop = 75;// величина трейлинг стопа extern int TrailingStep = 5; // шаг трейлинг стопа
В самом конце кода советника (вне функции СТАРТ) поставить функцию такого трала:
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж+ void TrailPositions() // функция трейлинг стоп { int Orders = OrdersTotal(); for (int i=0; i<Orders; i++) { if (!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) continue; if (OrderSymbol() != Symbol()) continue; if (OrderMagicNumber() == Magic ){ if (OrderType() == OP_BUY ) { if (Bid-OrderOpenPrice() > MinProfit*Point) { if (OrderStopLoss() < Bid-(TrailingStop+TrailingStep-1)*Point) { OrderModify(OrderTicket(), OrderOpenPrice(), Bid-TrailingStop*Point, OrderTakeProfit(), 0, Blue); } } } if (OrderType() == OP_SELL) { if (OrderOpenPrice()-Ask >MinProfit*Point) { if (OrderStopLoss() > Ask+(TrailingStop+TrailingStep-1)*Point || OrderStopLoss() == 0) { OrderModify(OrderTicket(), OrderOpenPrice(), Ask+TrailingStop*Point, OrderTakeProfit(), 0, Blue); } } } } } }
А в самом начале функции СТАРТ задать:
if (UseTrailing) TrailPositions(); // выключатель трейлинг стопа
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вот у меня такой простенький трал
Все отлично работает, но проблема в том что он тралит только при открытии новой свечи,а не в реальном времени. Как сделать чтоб он тралил влюбой момент временни?