Ответить
19.10.2013, 08:17
Аватар для Ivan010
Ivan010 Ivan010 вне форума Прохожий
Регистрация: 13.05.2013 / Сообщений: 1
Поблагодарили 0 раз(а) / Репутация: 1

По умолчанию Помогите пожалуйста со скриптом.

Здравствуйте Дамы и Господа, в программировании я новичок и поэтому прошу помощи в одном из скриптов. Суть скрипта в том чтобы он находил открытые ордера отдельно SELL отдельно BUY и модифицировал их под общий тейк-профит и при срабатывании этого тейк-профита закрывались все ордера одного направления. В этом скрипте почему то не закрываются ордера и модифицируется тейк-профит только последнего ордера. Что в нем может быть не так?:

double Bprice=0;
double Blots=0;
double Bsum=0;
for (int n=0; n<buyk; n++)
{
if (OrderSelect(n,SELECT_BY_POS,MODE_TRADES) && OrderType()==OP_BUY)

{
Blots=Blots+OrderLots();
Bsum=Bsum+OrderLots()*OrderOpenPrice();
}



if (Blots!=0) Bprice=Bsum/Blots;
if (Bprice>0 )
Bprice = NormalizeDouble(Bprice+level*Point,Digits);
if(OrderSelect(n,SELECT_BY_POS,MODE_TRADES) == true && OrderType() == OP_BUY && buyk>1)
OrderModify(buy,OrderOpenPrice(),0,Bprice,0,Red);
}

double Sprice=0;
double Slots=0;
double Ssum=0;
for ( int e=0; e<sellk; e++)
{
if (OrderSelect(e,SELECT_BY_POS,MODE_TRADES) && OrderType()==OP_SELL)
{
Slots=Slots+OrderLots();
Ssum=Ssum+OrderLots()*OrderOpenPrice();
}



if (Slots!=0) Sprice=Ssum/Slots;
if (Sprice>0 )


Sprice = NormalizeDouble(Sprice-level*Point,Digits);
if(OrderSelect(e,SELECT_BY_POS,MODE_TRADES) == true && OrderType() == OP_SELL && sellk>1)
OrderModify(sell,OrderOpenPrice(),0,Sprice,0,Red);

}
double sss,bbb;
for (int b=ksb; b>0; b--)

{sss= NormalizeDouble(Bid,Digits);
bbb= NormalizeDouble(Ask,Digits);
if (OrderSelect(b,SELECT_BY_POS,MODE_TRADES )== true && OrderType() == OP_BUY && OrderCloseTime()>0)
OrderClose(OrderTicket(),OrderLots(),bbb,3,Red);}
for (int v=ksb; v>0; v--)
{if (OrderSelect(v,SELECT_BY_POS,MODE_TRADES )== true && OrderType() == OP_SELL && OrderCloseTime()>0)
OrderClose(OrderTicket(),OrderLots(),sss,3,Red);}

Последний раз редактировалось chocolate; 19.10.2013 в 20:11.
20.10.2013, 09:31
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
Есть базовая функция библиотеная функция Init:

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

PHP код:
void fInitBase (string fs_SymbolList,
                
string fs_MagicList,
                
string fs_Delimiter ",")
{
   
bs_ExpertName StringConcatenate (WindowExpertName(), ":  "fGet_NameTF (Period()), "_"Symbol());
   
bs_SymbolList fs_SymbolList;
   
bs_MagicList fs_MagicList;
   
bs_Delimiter fs_Delimiter;
   
bb_RealTrade = (!IsTesting() && !IsOptimization());
   
bb_VirtualTrade = (IsOptimization() || (IsTesting() && !IsVisualMode()));
   if (
bd_SymPoint == 0.0)
       {
bd_SymPoint fGet_Point(Symbol());}
   
fGet_MarketInfo (Symbol(), -1);
   
bd_MAXLOT MarketInfo(Symbol(), MODE_MAXLOT);
   
bd_LOTSTEP MarketInfo(Symbol(), MODE_LOTSTEP);
   
bi_LotPrecision fLotPrecision ();
   
bd_MINLOT MarketInfo(Symbol(), MODE_MINLOT);
   
InitializeArray_STR (bsa_Comment"");
    
//---- Определяем индекс "ошибок" в массиве комментариев (gsa_Comment)
   
bi_IndERR ArraySize (bsa_Comment) - 1;
   
bi_Err GetLastError();
   
//---- Контролируем возможные ошибки
   
fPrint (StringConcatenate ("fInitBase() => "fErrorToString (bi_Err)));

   return;

При запуске эксперта выводится сообщение:
PHP код:
2013.10.20 11:02:57    2013.08.15 00:00  hoz_LoggingToAnywhere@library EURUSD.GI,M5ВниманиеfInitBase() => Ошибка № 0 :: 
[свернуть]

Что это означает? Я только учусь работать с библиотеками, так что опыта в этом не много. Дальше по ходу, если не ставить условие вывода ошибок, если их нет, печатаются соответствующие ИНИТЫ (у меня их несколько) с ошибкой № 0 -1 т.е. - ошибок НЕТ. Но когда Ошибка № 0 что-то я не совсем понимаю, как это воспринимать.

Последний раз редактировалось NSerega; 20.10.2013 в 18:14.
20.10.2013, 10:24
Аватар для Leonup
Leonup Leonup вне форума Новичок форума
Регистрация: 23.12.2011 / Сообщений: 58
Поблагодарили 4 раз(а) / Репутация: 5

По умолчанию Как правильно применить функцию NewBar() ?

Добрый день!

Есть два условия.
Для покупки:
if ((((Avr - Ask)/Point) >= Dist) && (((Ask - Min)/Point) >= Dist) && (CountBuy() == 0) && (CountSell() == 0))

Для продажи:
if ((((Bid - Avr)/Point) >= Dist) && (((Max - Bid)/Point) >= Dist) && (CountSell() == 0) && (CountBuy() == 0))

Max – уровень сопротивления, Min – уровень поддержки, Avr – середина между уровнями, Dist – минимальное расстояние в пунктах.

При таких условиях открываются сделки в обе стороны, но не всегда при открытии нового бара. Поэтому применяю функцию:

bool NewBar()
{
static datetime lastbar = 0;
datetime curbar = Time[0];
if(lastbar!=curbar)
{
lastbar=curbar;
return (true);
}
else
{
return(false);
}
}

Для покупки:
if ((NewBar() == true) && (((Avr - Ask)/Point) >= Dist) && (((Ask - Min)/Point) >= Dist) && (CountBuy() == 0) && (CountSell() == 0))

Для продажи:
if ((NewBar() == true) && (((Bid - Avr)/Point) >= Dist) && (((Max - Bid)/Point) >= Dist) && (CountSell() == 0) && (CountBuy() == 0))

Но в этом случае сделки открываются ТОЛЬКО на покупку. В логах ошибок никаких нет.

Как правильно применить функцию NewBar() ?
Спасибо.
20.10.2013, 10:39
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Добрый день!

Есть два условия.
...
Как правильно применить функцию NewBar() ?
Спасибо.
Код:
if (NewBar()) {
   if ((((Avr - Ask)/Point) >= Dist) && (((Ask - Min)/Point) >= Dist) && (CountBuy() == 0) && (CountSell() == 0))
   if ((((Bid - Avr)/Point) >= Dist) && (((Max - Bid)/Point) >= Dist) && (CountSell() == 0) && (CountBuy() == 0))
}
20.10.2013, 11:38
Аватар для Leonup
Leonup Leonup вне форума Новичок форума
Регистрация: 23.12.2011 / Сообщений: 58
Поблагодарили 4 раз(а) / Репутация: 5
Код:
if (NewBar()) {
   if ((((Avr - Ask)/Point) >= Dist) && (((Ask - Min)/Point) >= Dist) && (CountBuy() == 0) && (CountSell() == 0))
   if ((((Bid - Avr)/Point) >= Dist) && (((Max - Bid)/Point) >= Dist) && (CountSell() == 0) && (CountBuy() == 0))
}
Все заработало. Спасибо!
20.10.2013, 12:23
Аватар для болгарин
болгарин болгарин вне форума Прохожий
Регистрация: 20.10.2013 / Адрес: москва / Сообщений: 1
Поблагодарили 0 раз(а) / Репутация: 1
Привет! третий месяц хожу вокруг да окала Nevalyashka_BreakdownLevel. немогу под себя подогнать.Помогите коллеги!
20.10.2013, 14:45
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Здравствуйте Дамы и Господа, в программировании я новичок и поэтому прошу помощи в одном из скриптов.
Для получения помощи имеет смысл выкладывать код в тегах [CODE][/CODE] или аттачить файл, если код большой. Код должен сходу компилироваться, если только суть вопроса не в синтаксисе. Иначе шансов нет, тут мало желающих анализировать фрагменты кода, в котором нет даже объявления переменных.
20.10.2013, 14:58
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
...
PHP код:
   bi_Err GetLastError();
   
//---- Контролируем возможные ошибки
   
fPrint (StringConcatenate ("fInitBase() => "fErrorToString (bi_Err))); 
...
Но когда Ошибка № 0 что-то я не совсем понимаю, как это воспринимать.
GetLastError() возвращает 0, если ошибок нет. fPrint() твой честно его выдает. А ты что и как хотел?
20.10.2013, 15:20
Аватар для qqmber
qqmber qqmber вне форума Почётный гражданин
Регистрация: 20.01.2013 / Сообщений: 530
Поблагодарили 386 раз(а) / Репутация: 386
Сообщение от: болгарин
Привет! третий месяц хожу вокруг да окала Nevalyashka_BreakdownLevel. немогу под себя подогнать.Помогите коллеги!
В соседней ветке дорабатывают боты. Тут про язык mql язык чешут.

Последний раз редактировалось qqmber; 20.10.2013 в 15:23.
20.10.2013, 15:37
Аватар для ansol
ansol ansol вне форума Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,062
Поблагодарили 892 раз(а) / Репутация: 878
GetLastError() возвращает 0, если ошибок нет. fPrint() твой честно его выдает. А ты что и как хотел?
Наверное, можно еще и ЕrrorDescription(0 напечатать, но в случае с нулем будет "No Error"
20.10.2013, 16:48
Аватар для Conn
Conn Conn вне форума Активный участник
Регистрация: 30.09.2013 / Сообщений: 55
Поблагодарили 57 раз(а) / Репутация: 58
Уважаемые программисты, попробовал сделать индикатор вверху в виде гистограммы (см.рис.1). получилось так что гистограмма на sell отображается иначе чем гистограмма на buy. Скажите пожалуйста в чем проблема и как ее исправить?

Последний раз редактировалось Conn; 20.10.2013 в 16:55.
20.10.2013, 16:53
Аватар для ansol
ansol ansol вне форума Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,062
Поблагодарили 892 раз(а) / Репутация: 878
Уважаемые программисты, взгляните пожалуйста на рисунок и скажите в чем проблема и как ее испавить?
Ну ты спросил!
Может, в программе не учитывается Bid и Ask? Например, все работает по Bid, как это делают все индикаторы
20.10.2013, 16:58
Аватар для Conn
Conn Conn вне форума Активный участник
Регистрация: 30.09.2013 / Сообщений: 55
Поблагодарили 57 раз(а) / Репутация: 58
Ну ты спросил!
Может, в программе не учитывается Bid и Ask? Например, все работает по Bid, как это делают все индикаторы
Честно говоря не понял, я в языке программирования слабоват, можно по подробнее?
20.10.2013, 17:03
Аватар для ansol
ansol ansol вне форума Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,062
Поблагодарили 892 раз(а) / Репутация: 878
Честно говоря не понял, я в языке программирования слабоват, можно по подробнее?
Ну это я так, с разгону
Bid - цена покупки, именно ей оперируют все индюки и даже часто кривые советники. Между тем есть еще цена Ask - для продажи.
Если у вас на покупку Buy все верно, а на Sell неправильно, то возникает предположение, что не та цена используется. Вот и все.
Пардон, что влез, счас более вумные люди подскажут, но код надо поковырять и спрашивать по MQL4, а не "почему у меня не работает"
20.10.2013, 17:20
Аватар для Conn
Conn Conn вне форума Активный участник
Регистрация: 30.09.2013 / Сообщений: 55
Поблагодарили 57 раз(а) / Репутация: 58
Ну это я так, с разгону
Bid - цена покупки, именно ей оперируют все индюки и даже часто кривые советники. Между тем есть еще цена Ask - для продажи.
Если у вас на покупку Buy все верно, а на Sell неправильно, то возникает предположение, что не та цена используется. Вот и все.
Пардон, что влез, счас более вумные люди подскажут, но код надо поковырять и спрашивать по MQL4, а не "почему у меня не работает"
Это трудно обьяснить, просто взгляните на скрин выложенный мною, и сравните два индикатора, сигнал на buy и сигнал на sell, вы увидите разницу. Выкладываю эти индикаторы оригинал версию и в виде гистограммы для сравнение.
20.10.2013, 18:36
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
GetLastError() возвращает 0, если ошибок нет. fPrint() твой честно его выдает. А ты что и как хотел?
Если ошибки нет, возврает же -1 по ходу, а 0 это типа ошибка - нет ошибки.
20.10.2013, 18:39
Аватар для ansol
ansol ansol вне форума Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,062
Поблагодарили 892 раз(а) / Репутация: 878
Если ошибки нет, возврает же -1 по ходу, а 0 это типа ошибка - нет ошибки.
Мне лениво спорить и я пропустил ряд ляпов по моим постам ранее, но:
Хелп-то будем читать или будем сочинять ахинею?
Цитата:
int GetLastError( )
Функция возвращает код последней ошибки, после чего значение специальной переменной last_error, в которой хранится код последней ошибки обнуляется. Так что последующий вызов GetLastError() вернет значение 0.
Пример:
int err;
int handle=FileOpen("somefile.dat", FILE_READ|FILE_BIN);
if(handle<1)
{
err=GetLastError();
Print("error(",err,"): ",ErrorDescription(err));
return(0);
}

Какой минус адыныдыныдын?!
20.10.2013, 18:43
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
В общем, там был косяк, который я уже решил. Задача щяс другая. Есть множество объявленных глобальных переменных в заголовчном файле, часть из которых используется различными библиотеками. Если эту ПАЧКУ объявленных переменных в виде канкретного заголовочного файла помещать в каждую из библиотек это же будет не рационально и больше расход памяти так? Как-то так выходит, что иначе не придумывается...
20.10.2013, 18:46
Аватар для ansol
ansol ansol вне форума Местный знаток
За призовое место в конкурсе 

Регистрация: 22.04.2010 / Сообщений: 2,062
Поблагодарили 892 раз(а) / Репутация: 878
У тебю какой-то мрачно-глобальный проект
Обязательно такую кучу библиотек использовать?
MQL4 - довольно убогая реинкарнация языка, она не предусматривает создание суперпуперпроектов.
Может, ну его на хрен?
20.10.2013, 19:45
Аватар для hoz
hoz hoz вне форума Активный участник
Регистрация: 01.04.2011 / Сообщений: 532
Поблагодарили 112 раз(а) / Репутация: 111
  • Отправить сообщение для hoz с помощью ICQ
У тебю какой-то мрачно-глобальный проект
Обязательно такую кучу библиотек использовать?
MQL4 - довольно убогая реинкарнация языка, она не предусматривает создание суперпуперпроектов.
Может, ну его на хрен?
Хочу чтоб писалось всё как можно удобнее и гибче, но что-то не хрена не получается. Вот и думаю, нахрен или всё-таки возможно... Хотя пока что возможностей особо не наблюдается, хрень полнейшая выходит.
Все кого я знаю пишут "всё в одном", а мне такой подход не нравится. Совы становятся километровые, вот там точно ну его нахрен. Я уже сыт по горло километровыми совками, где ни конца ни края не видно.
А щяс написал так всё типа компактно, тока не пашет теперь..
Распринтовав я всё увидел где косяки, но как всё структурировать ума не приложу.

На самом деле, я б очень рад был с кем-нить лично обсудить некоторые вещи, т.к. иногда одно голова хорошо, а две бывает лучше.

Последний раз редактировалось hoz; 20.10.2013 в 19:52.
Ответить

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


Опции темы

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

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



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


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