Ответить
15.01.2015, 21:10
Аватар для _SERG_
_SERG_ _SERG_ вне форума Активный участник
Регистрация: 21.07.2009 / Сообщений: 264
Поблагодарили 82 раз(а) / Репутация: 82
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), то не должен открывать, как минимум.
Где ещё есть места отвечающие за "СИГНАЛ" по открытию?
15.01.2015, 21:13
Аватар для gold_traid
gold_traid gold_traid вне форума Новичок форума
Регистрация: 24.08.2012 / Сообщений: 108
Поблагодарили 27 раз(а) / Репутация: 28
  • Отправить сообщение для gold_traid с помощью ICQ
Если уже открыты ордера, и находятся в рынке (OrdersTotal()==0), то не должен открывать, как минимум.
Где ещё есть места отвечающие за "СИГНАЛ" по открытию?
так в том то и дело что на каждой свече открывает
15.01.2015, 21:15
Аватар для gold_traid
gold_traid gold_traid вне форума Новичок форума
Регистрация: 24.08.2012 / Сообщений: 108
Поблагодарили 27 раз(а) / Репутация: 28
  • Отправить сообщение для gold_traid с помощью ICQ
так в том то и дело что на каждой свече открывает
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
15.01.2015, 21:21
Аватар для gold_traid
gold_traid gold_traid вне форума Новичок форума
Регистрация: 24.08.2012 / Сообщений: 108
Поблагодарили 27 раз(а) / Репутация: 28
  • Отправить сообщение для gold_traid с помощью ICQ
Если уже открыты ордера, и находятся в рынке (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
15.01.2015, 21:22
Аватар для gold_traid
gold_traid gold_traid вне форума Новичок форума
Регистрация: 24.08.2012 / Сообщений: 108
Поблагодарили 27 раз(а) / Репутация: 28
  • Отправить сообщение для gold_traid с помощью ICQ
вот чего журнал пишет
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
получается что открывается на каждом тике
почему ни как не могу понять
15.01.2015, 21:31
Аватар для _SERG_
_SERG_ _SERG_ вне форума Активный участник
Регистрация: 21.07.2009 / Сообщений: 264
Поблагодарили 82 раз(а) / Репутация: 82
так в том то и дело что на каждой свече открывает
Вывод: Условие не отрабатывает.
Способ решения: Запустить в отладчике, и посмотреть, что на самом деле происходит. (А не в собственном воображении.)
15.01.2015, 22:02
Аватар для gold_traid
gold_traid gold_traid вне форума Новичок форума
Регистрация: 24.08.2012 / Сообщений: 108
Поблагодарили 27 раз(а) / Репутация: 28
  • Отправить сообщение для gold_traid с помощью ICQ
Вывод: Условие не отрабатывает.
Способ решения: Запустить в отладчике, и посмотреть, что на самом деле происходит. (А не в собственном воображении.)
выяснилось в чем дело а дело в том что сигналом слкжит изменение цвета индикатора а не его значение на предидущих барах вот тока как описать это условие
15.01.2015, 22:06
Регистрация: 09.08.2012 / Адрес: Ua_Khm / Сообщений: 1,777
Поблагодарили 9,209 раз(а) / Репутация: 9214

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

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.
15.01.2015, 22:09
Аватар для _SERG_
_SERG_ _SERG_ вне форума Активный участник
Регистрация: 21.07.2009 / Сообщений: 264
Поблагодарили 82 раз(а) / Репутация: 82
выяснилось в чем дело а дело в том что сигналом слкжит изменение цвета индикатора а не его значение на предидущих барах вот тока как описать это условие
Скрипнем мозгом, и посмотрим туда, где за цвет индикатор отвечает.
А может за численное значение, которое за смену цвет отвечает.
Ну короче, цифра какая была, а какая стала?
(....без твоего участия, там ни чего не происходит. )
15.01.2015, 22:16
Аватар для _SERG_
_SERG_ _SERG_ вне форума Активный участник
Регистрация: 21.07.2009 / Сообщений: 264
Поблагодарили 82 раз(а) / Репутация: 82

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



[свернуть]


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

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

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

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

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

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

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

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

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

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

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

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

ведь при открытии ордера я могу вапще убрать StopLoss=0
и второй момент, трал начинает работу когда цена идет в нашу сторону, то есть разница между текущей ценой Bid и ценой открытия ордера дает профит, я прав???? но где тогда ошибки в коде, и почему трал не работает..?
тестю советники, иногда пишу и дорабатываю их ...
ПУТЬ ДЛИННОЙ В 10000 МИЛЬ НАЧИНАЕТСЯ С 1 ШАГА (Лао Цзы)
Ответить

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


Опции темы

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

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



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


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