Ответ
 
Опции темы
15.01.2015, 21:10
Аватар для _SERG_
_SERG_ Активный участник
Регистрация: 21.07.2009 / Сообщений: 264
Поблагодарили 82 раз(а) / Репутация: 82
Сообщение от gold_traid Посмотреть сообщение
PriceHigh = iCustom(Symbol() ,0, "100pipstodayscalper", BPERIOD , aTake_Profit , aStop_Loss , 0 , 0);
PriceLow = iCustom(Symbol() ,0, "100pipstodayscalper", BPERIOD , aTake_Profit , aStop_Loss , 2 , 1);
if (OrdersTotal()==0 && PriceHigh>PriceLow && CountBuy()==0 && CountSell() ==0);
{
SL = NormalizeDouble(PriceHigh- aStop_Loss * Point, Digits);
TP = NormalizeDouble(PriceHigh + aTake_Profit *Point,Digits);
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slipage,0,0,com ent,Magic,0,Red);
Если уже открыты ордера, и находятся в рынке (OrdersTotal()==0), то не должен открывать, как минимум.
Где ещё есть места отвечающие за "СИГНАЛ" по открытию?
_SERG_ на форуме Ответить с цитированиемОтветить с цитированием  
15.01.2015, 21:13
Аватар для gold_traid
gold_traid Новичок форума
Регистрация: 24.08.2012 / Сообщений: 108
Поблагодарили 27 раз(а) / Репутация: 28
  • Отправить сообщение для gold_traid с помощью ICQ
Сообщение от _SERG_ Посмотреть сообщение
Если уже открыты ордера, и находятся в рынке (OrdersTotal()==0), то не должен открывать, как минимум.
Где ещё есть места отвечающие за "СИГНАЛ" по открытию?
так в том то и дело что на каждой свече открывает
gold_traid вне форума Ответить с цитированиемОтветить с цитированием  
15.01.2015, 21:15
Аватар для gold_traid
gold_traid Новичок форума
Регистрация: 24.08.2012 / Сообщений: 108
Поблагодарили 27 раз(а) / Репутация: 28
  • Отправить сообщение для gold_traid с помощью ICQ
Сообщение от gold_traid Посмотреть сообщение
так в том то и дело что на каждой свече открывает
total=OrdersTotal();
if(total<1);
m0=iCustom(Symbol() ,0, "100pipstodayscalper", BPERIOD , aTake_Profit , aStop_Loss , 0 , 0);
m1=iCustom(Symbol() ,0, "100pipstodayscalper", BPERIOD , aTake_Profit , aStop_Loss , 2 , 1);
if(m0>m1)
{

ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+St opLoss*Point,Bid-TakeProfit*Point,Magic,0,Red);

if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("Sell order opened : ",OrderOpenPrice());
}
else Print("Error opening Sell order : ",GetLastError());
return;
}



if(m0<m1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask+Sto pLoss*Point,Ask-TakeProfit*Point,Magic,0,Blue);

if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES )) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return;
}
for (cnt=0;cnt;

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol());
{
if(OrderType()==OP_BUY)
{

if(m0>m1)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet) ; // close position
return; // exit
gold_traid вне форума Ответить с цитированиемОтветить с цитированием  
15.01.2015, 21:21
Аватар для gold_traid
gold_traid Новичок форума
Регистрация: 24.08.2012 / Сообщений: 108
Поблагодарили 27 раз(а) / Репутация: 28
  • Отправить сообщение для gold_traid с помощью ICQ
Сообщение от _SERG_ Посмотреть сообщение
Если уже открыты ордера, и находятся в рынке (OrdersTotal()==0), то не должен открывать, как минимум.
Где ещё есть места отвечающие за "СИГНАЛ" по открытию?
вот чего журнал пишет
2015.01.16 02:20:00.669 2013.02.04 00:30 100pipsScalper EURUSD,M5: open #7 buy 0.10 EURUSD at 1.3652 ok
2015.01.16 02:20:00.603 2013.02.04 00:25 100pipsScalper EURUSD,M5: open #6 buy 0.10 EURUSD at 1.3654 ok
2015.01.16 02:20:00.537 2013.02.04 00:20 100pipsScalper EURUSD,M5: open #5 buy 0.10 EURUSD at 1.3654 ok
2015.01.16 02:20:00.471 2013.02.04 00:15 100pipsScalper EURUSD,M5: open #4 buy 0.10 EURUSD at 1.3651 ok
2015.01.16 02:20:00.405 2013.02.04 00:10 100pipsScalper EURUSD,M5: open #3 buy 0.10 EURUSD at 1.3650 ok
2015.01.16 02:20:00.339 2013.02.04 00:05 100pipsScalper EURUSD,M5: open #2 buy 0.10 EURUSD at 1.3648 ok
gold_traid вне форума Ответить с цитированиемОтветить с цитированием  
15.01.2015, 21:22
Аватар для gold_traid
gold_traid Новичок форума
Регистрация: 24.08.2012 / Сообщений: 108
Поблагодарили 27 раз(а) / Репутация: 28
  • Отправить сообщение для gold_traid с помощью ICQ
Сообщение от gold_traid Посмотреть сообщение
вот чего журнал пишет
2015.01.16 02:20:00.669 2013.02.04 00:30 100pipsScalper EURUSD,M5: open #7 buy 0.10 EURUSD at 1.3652 ok
2015.01.16 02:20:00.603 2013.02.04 00:25 100pipsScalper EURUSD,M5: open #6 buy 0.10 EURUSD at 1.3654 ok
2015.01.16 02:20:00.537 2013.02.04 00:20 100pipsScalper EURUSD,M5: open #5 buy 0.10 EURUSD at 1.3654 ok
2015.01.16 02:20:00.471 2013.02.04 00:15 100pipsScalper EURUSD,M5: open #4 buy 0.10 EURUSD at 1.3651 ok
2015.01.16 02:20:00.405 2013.02.04 00:10 100pipsScalper EURUSD,M5: open #3 buy 0.10 EURUSD at 1.3650 ok
2015.01.16 02:20:00.339 2013.02.04 00:05 100pipsScalper EURUSD,M5: open #2 buy 0.10 EURUSD at 1.3648 ok
получается что открывается на каждом тике
почему ни как не могу понять
gold_traid вне форума Ответить с цитированиемОтветить с цитированием  
15.01.2015, 21:31
Аватар для _SERG_
_SERG_ Активный участник
Регистрация: 21.07.2009 / Сообщений: 264
Поблагодарили 82 раз(а) / Репутация: 82
Сообщение от gold_traid Посмотреть сообщение
так в том то и дело что на каждой свече открывает
Вывод: Условие не отрабатывает.
Способ решения: Запустить в отладчике, и посмотреть, что на самом деле происходит. (А не в собственном воображении.)
_SERG_ на форуме Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
gold_traid (15.01.2015)
15.01.2015, 22:02
Аватар для gold_traid
gold_traid Новичок форума
Регистрация: 24.08.2012 / Сообщений: 108
Поблагодарили 27 раз(а) / Репутация: 28
  • Отправить сообщение для gold_traid с помощью ICQ
Сообщение от _SERG_ Посмотреть сообщение
Вывод: Условие не отрабатывает.
Способ решения: Запустить в отладчике, и посмотреть, что на самом деле происходит. (А не в собственном воображении.)
выяснилось в чем дело а дело в том что сигналом слкжит изменение цвета индикатора а не его значение на предидущих барах вот тока как описать это условие
gold_traid вне форума Ответить с цитированиемОтветить с цитированием  
15.01.2015, 22:06
Регистрация: 09.08.2012 / Адрес: Ua_Khm / Сообщений: 1,758
Поблагодарили 9,109 раз(а) / Репутация: 9114

Скрытый текст

Сообщение от gold_traid Посмотреть сообщение
total=OrdersTotal();
if(total<1);
m0=iCustom(Symbol() ,0, "100pipstodayscalper", BPERIOD , aTake_Profit , aStop_Loss , 0 , 0);
m1=iCustom(Symbol() ,0, "100pipstodayscalper", BPERIOD , aTake_Profit , aStop_Loss , 2 , 1);
if(m0>m1)
{

ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,Magic,0,Red);

if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Sell order opened : ",OrderOpenPrice());
}
else Print("Error opening Sell order : ",GetLastError());
return;
}



if(m0<m1)
{
ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,3,Ask+StopLoss*Point,Ask-TakeProfit*Point,Magic,0,Blue);

if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
}
else Print("Error opening BUY order : ",GetLastError());
return;
}
for (cnt=0;cnt;

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol());
{
if(OrderType()==OP_BUY)
{

if(m0>m1)
{
OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
return; // exit
[свернуть]


У Вас не отрабатывает условие на весь код: if(total<1);
Во первых: после закрытой скобки - убрать точку с запятой.
Во вторых: это условие в таком виде повлияет только на первую строчку идущую после него, т.е. на m0=...., а все остальные строки его игнорируют. Откройте скобку после условия: if(total<1){ и соответственно, закрыть в конце кода, перед return(0);. Пробуйте.

Последний раз редактировалось mobidik; 15.01.2015 в 22:08.
mobidik на форуме Ответить с цитированиемОтветить с цитированием  
15.01.2015, 22:09
Аватар для _SERG_
_SERG_ Активный участник
Регистрация: 21.07.2009 / Сообщений: 264
Поблагодарили 82 раз(а) / Репутация: 82
Сообщение от gold_traid Посмотреть сообщение
выяснилось в чем дело а дело в том что сигналом слкжит изменение цвета индикатора а не его значение на предидущих барах вот тока как описать это условие
Скрипнем мозгом, и посмотрим туда, где за цвет индикатор отвечает.
А может за численное значение, которое за смену цвет отвечает.
Ну короче, цифра какая была, а какая стала?
(....без твоего участия, там ни чего не происходит. )
_SERG_ на форуме Ответить с цитированиемОтветить с цитированием  
15.01.2015, 22:16
Аватар для _SERG_
_SERG_ Активный участник
Регистрация: 21.07.2009 / Сообщений: 264
Поблагодарили 82 раз(а) / Репутация: 82
Сообщение от mobidik Посмотреть сообщение

Скрытый текст



[свернуть]


У Вас не отрабатывает условие на весь код: if(total<1);
Во первых: после закрытой скобки - убрать точку с запятой.
Во вторых: это условие в таком виде повлияет только на первую строчку идущую после него, т.е. на m0=...., а все остальные строки его игнорируют. Откройте скобку после условия: if(total<1){ и соответственно, закрыть в конце кода, перед return(0);. Пробуйте.
Это начиналось с Этого:
Цитата:
if (OrdersTotal()==0 && PriceHigh>PriceLow && CountBuy()==0 && CountSell() ==0);
{
SL = NormalizeDouble(PriceHigh- aStop_Loss * Point, Digits);
TP = NormalizeDouble(PriceHigh + aTake_Profit *Point,Digits);
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slipage,0,0,com ent,Magic,0,Red);
....
а дальше как получилось. 3403 я пропустил. УВы.

Последний раз редактировалось _SERG_; 15.01.2015 в 22:19.
_SERG_ на форуме Ответить с цитированиемОтветить с цитированием  
16.01.2015, 03:36
Аватар для matro3
matro3 Почётный гражданин
Регистрация: 18.07.2013 / Сообщений: 349
Поблагодарили 340 раз(а) / Репутация: 344
Сообщение от gold_traid Посмотреть сообщение
Всем доброго времени суток!У меня советник открывает ордер на каждом баре как это поправить?
PHP код:
if(pos.exists &&
         ((
iBarShift(_SymbolPeriodTFpos.last_deal_timefalse) <= 0) ||
         (
iBarShift(_SymbolPeriodTFpos.last_deal_timefalse) <= barsToEnter && barsToEnter 0))
      ) return(
ENTER_NONE); 
По человечи:
Если позиция открыта и
((последняя сделка была открыта на текущей свече периода PeriodTF)
или
(свеча с последней сделкой на периоде PeriodTF меньше чем кол-во баров для входа и это кол-во больше 0)),
то входа нет
matro3 вне форума Ответить с цитированиемОтветить с цитированием  
17.01.2015, 19:18
Аватар для Milord
Milord Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 702 раз(а) / Репутация: 705

По умолчанию Помогите плиз - найти ошибку в коде???


уважаемые профи проггеры MQL4, помогите плиз найти ошибку в коде трала, не работает он у меня, цепляю как обычно к советнику, и он у мня не работает, гляньте свежим взглядом что в коде неверно, или лишнее может, брал его из готового советника... мне нужен код в старом билде, например 229, новый пока не освоил, извиняйте, разрабы слишком быстро все меняют, не успеваю гнаться за ними...
ЗАРАНЕЕ СПАСИБО!

PHP код:
//-----------------------------------------------------------------
void Tral()
{
  for(
int i=0i<OrdersTotal(); i++) { 
    if(!(
OrderSelect(iSELECT_BY_POSMODE_TRADES))) continue; 
    if(
OrderSymbol() != Symbol()) continue;        

    if(
OrderType()==OP_BUY) { 
      if(
Bid-OrderOpenPrice()>TrailingStop*Point&&Bid>=OrderOpenPrice()+TrailingStart*Point) { 
        if(
OrderStopLoss()<Bid-(TrailingStop+TrailingStep-1)*Point
          
OrderModify(OrderTicket(), OrderOpenPrice(),Bid-TrailingStop*PointOrderTakeProfit(), 0CLR_NONE); 
      } 
    } 

   if(
OrderType()==OP_SELL) { 
     if(
OrderOpenPrice()-Ask>TrailingStop*Point&& Ask<=OrderOpenPrice()-TrailingStart*Point) { 
        if(
OrderStopLoss()>Ask+(TrailingStop+TrailingStep-1)*Point
         
OrderModify(OrderTicket(), OrderOpenPrice(),Ask+TrailingStop*PointOrderTakeProfit(), 0CLR_NONE); 
      }
    } 
  } 
  
}
//------------------------------------------------ 

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)

Последний раз редактировалось Milord; 17.01.2015 в 19:26.
Milord вне форума Ответить с цитированиемОтветить с цитированием  
17.01.2015, 20:19
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от Milord Посмотреть сообщение
уважаемые профи проггеры MQL4, помогите плиз найти ошибку в коде трала, не работает он у меня, цепляю как обычно к советнику, и он у мня не работает, гляньте свежим взглядом что в коде неверно, или лишнее может, брал его из готового советника... мне нужен код в старом билде, например 229, новый пока не освоил, извиняйте, разрабы слишком быстро все меняют, не успеваю гнаться за ними...
ЗАРАНЕЕ СПАСИБО!
Если это трейлинг, то проверка должна быть для Buy
if(Bid - OrderStopLoss() > чегото*_point ) а у тебя цена открытия ордера

ps. И отличие от старых принципов в том, что надо обязательно контролировать выполнение хотя-бы так
if(OrderModify(...........) == false) Alert();
А по хорошему, то надо приспособить обработку ошибок и в случае неудачного выполнения, повторить модификацию ордера...

Последний раз редактировалось AlexeyVik; 17.01.2015 в 20:24.
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
Milord (17.01.2015)
17.01.2015, 20:35
Аватар для SlavaR
SlavaR Активный участник
Регистрация: 25.05.2010 / Адрес: Москва / Сообщений: 81
Поблагодарили 33 раз(а) / Репутация: 34
  • Отправить сообщение для SlavaR с помощью ICQ Отправить сообщение для SlavaR с помощью Skype™
Добрый день.
Требуется чтобы советник от начала своей работы и до выключения помнил состояние баланса и не менял его на всём протяжении работы .
Подскажите пожалуйста как написать эту часть кода? Ничего в голову не приходит. (пользуюсь ещё старым кодом)
SlavaR вне форума Ответить с цитированиемОтветить с цитированием  
17.01.2015, 21:41
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от SlavaR Посмотреть сообщение
Добрый день.
Требуется чтобы советник от начала своей работы и до выключения помнил состояние баланса и не менял его на всём протяжении работы .
Подскажите пожалуйста как написать эту часть кода? Ничего в голову не приходит. (пользуюсь ещё старым кодом)
Ну так объяви переменную на глобальном уровне и присвой в init() ей значение AccountBalance()
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
SlavaR (17.01.2015)
18.01.2015, 00:55
Аватар для SlavaR
SlavaR Активный участник
Регистрация: 25.05.2010 / Адрес: Москва / Сообщений: 81
Поблагодарили 33 раз(а) / Репутация: 34
  • Отправить сообщение для SlavaR с помощью ICQ Отправить сообщение для SlavaR с помощью Skype™
Сообщение от AlexeyVik Посмотреть сообщение
Ну так объяви переменную на глобальном уровне и присвой в init() ей значение AccountBalance()
Благодарю. Всё получилось.
SlavaR вне форума Ответить с цитированиемОтветить с цитированием  
18.01.2015, 04:26
Аватар для ansol
ansol Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,016
Поблагодарили 855 раз(а) / Репутация: 841
Сообщение от AlexeyVik Посмотреть сообщение
ps. И отличие от старых принципов в том, что надо обязательно контролировать выполнение хотя-бы так
if(OrderModify(...........) == false) Alert();
Да-да, конечно!
А еще надо так:
if(a>b==false) alert();

Не парь человеку мозги! Если функция возващает булево значение true/false, то ничего делать не надо:
if(OrDerModify(...)) alert();

Такая конструкция не выдает никаких предупреждений, даже если включена строгая проверка #property strict
что является логичным и грамотным
ansol вне форума Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
eevviill (18.01.2015), Milord (18.01.2015)
18.01.2015, 06:30
Аватар для AlexeyVik
AlexeyVik Программист mql4 mql5
Регистрация: 19.11.2009 / Сообщений: 2,590
Поблагодарили 3,712 раз(а) / Репутация: 3708
Сообщение от ansol Посмотреть сообщение
Да-да, конечно!
А еще надо так:
if(a>b==false) alert();

Не парь человеку мозги! Если функция возващает булево значение true/false, то ничего делать не надо:
if(OrDerModify(...)) alert();

Такая конструкция не выдает никаких предупреждений, даже если включена строгая проверка #property strict
что является логичным и грамотным
Ну нет у меня желания ограничивать тебя в чём-либо. Делай как тебе нравится, но последуй своему совету: "Не парь людям мозги" и не выдирай из текста только то что удобно извратить. Если ты хочешь слышать оповещение об удачном выполнении команды, то ты всё правильно написал. Только не думаешь о том что если по какой-то причине команда не будет выполнена то, не находясь у монитора, ты никогда не услышишь предупреждения.
AlexeyVik вне форума Ответить с цитированиемОтветить с цитированием  
18.01.2015, 06:37
Аватар для ansol
ansol Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,016
Поблагодарили 855 раз(а) / Репутация: 841
Сообщение от AlexeyVik Посмотреть сообщение
Ну нет у меня желания ограничивать тебя в чём-либо. Делай как тебе нравится, но последуй своему совету: "Не парь людям мозги" и не выдирай из текста только то что удобно извратить. Если ты хочешь слышать оповещение об удачном выполнении команды, то ты всё правильно написал. Только не думаешь о том что если по какой-то причине команда не будет выполнена то, не находясь у монитора, ты никогда не услышишь предупреждения.
Я, возможно, неудачно выразился, тогда уточню/поправлюсь:
Данная конструкция будет работать безо вских "=="
Если интересует значение true, то пишем
if(OrderModify(...))
Если false, то
if(!OrderModify(...))
А идиотская конструкция if(OrderModify == true или false) не нужна.
Так понятней?
ansol вне форума Ответить с цитированиемОтветить с цитированием  
18.01.2015, 06:39
Аватар для Milord
Milord Местный знаток
Регистрация: 26.03.2011 / Сообщений: 596
Поблагодарили 702 раз(а) / Репутация: 705
Сообщение от AlexeyVik Посмотреть сообщение
Если это трейлинг, то проверка должна быть для Buy
if(Bid - OrderStopLoss() > чегото*_point ) а у тебя цена открытия ордера

ps. И отличие от старых принципов в том, что надо обязательно контролировать выполнение хотя-бы так
if(OrderModify(...........) == false) Alert();
А по хорошему, то надо приспособить обработку ошибок и в случае неудачного выполнения, повторить модификацию ордера...
давайте разберем ошибки кода хотя бы без проверок на ошибки, чтобы было понятнее, у мня вопрос - зачем сравнивать как вы пишете
if(Bid-OrderStopLoss>TrailigStart*Point)

ведь при открытии ордера я могу вапще убрать StopLoss=0
и второй момент, трал начинает работу когда цена идет в нашу сторону, то есть разница между текущей ценой Bid и ценой открытия ордера дает профит, я прав???? но где тогда ошибки в коде, и почему трал не работает..?

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
Milord вне форума Ответить с цитированиемОтветить с цитированием  
Ответ

Метки
mql4, mql4 помощь, вопросы mql4


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 07:30. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO