Автоматизация торговли на финансовых рынках Автоматизация торговли на финансовых рынках

 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Библиотеки функций
На страницу Пред.  1, 2, 3, 4, 5, 6  След.
 
Начать новую тему   Ответить на тему    Список форумов Автоматизация торговли на финансовых рынках -> Программирование в MQL4
Предыдущая тема :: Следующая тема  
Автор Сообщение
Gelonis



Зарегистрирован: 19.01.2008
Сообщения: 2

СообщениеДобавлено: Чт Ноя 06, 2008 7:48 pm    Заголовок сообщения: Ответить с цитатой

Благодарю!!!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
johnfantom



Зарегистрирован: 30.01.2006
Сообщения: 12

СообщениеДобавлено: Пт Янв 02, 2009 4:34 pm    Заголовок сообщения: Re: Библиотеки функций Ответить с цитатой

KimIV писал(а):


Игорь ! С Новым Годом !

Можно вопрос ?!
Как обойти ограничение ДЦ по мин. стопу и профиту и также установке ордеров ?
В моем ДЦ мин. стоп и трал 30 пп. , на быстром рынке увеличивают до 80-100 пп . Советник по профиту твой я использую , а вот стоп ?!
Иногда нужен стоп не более 5-10 пп. или в валюте депозита ... а программист я никакой
Laughing
В веточке по функциям видел функцию
ClosePosBySizeLossInCurrency
но прикрутить ее к советнику не смог , нет Базовых Знаний ?!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
johnfantom



Зарегистрирован: 30.01.2006
Сообщения: 12

СообщениеДобавлено: Пт Янв 02, 2009 5:46 pm    Заголовок сообщения: Re: Библиотеки функций Ответить с цитатой

Вроде Компилировалось, вот что получилось !

//+----------------------------------------------------------------------------+
//| e-CloseByLossPosInCurrency.mq4 |
//| |
//| Ким Игорь В. aka KimIV |
//| http://www.kimiv.ru |
//| |
//| 22.04.2008 Советник закрывает только те позиции, у которых убыток |
//| в валюте депозита превысил некоторое заданное значение. |
//+----------------------------------------------------------------------------+
#property copyright "Ким Игорь В. aka KimIV"
#property link "http://www.kimiv.ru"


//------- Внешние параметры советника -----------------------------------------+
string _P_Expert = "---------- Параметры советника";
extern int NumberAccount = 0; // Номер торгового счёта
extern string symbol = "0"; // Торговый инструмент
// "0" - любой
// "" - текущий
extern int Operation = -1; // Торговая операция:
// -1 - любая
// 0 - OP_BUY
// 1 - OP_SELL
extern double Loss = 50; // Loss в валюте депозита
extern int MagicNumber = 0; // MagicNumber
extern bool ShowComment = True; // Показывать комментарий


//------- Глобальные переменные советника -------------------------------------+
bool gbNoInit = False; // Флаг неудачной инициализации
int Slippage = 3; // Проскальзывание цены
int NumberOfTry = 5; // Количество торговых попыток
bool UseSound = True; // Использовать звуковой сигнал
string NameFileSound = "expert.wav"; // Наименование звукового файла
color clCloseBuy = Blue; // Цвет значка закрытия покупки
color clCloseSell = Red; // Цвет значка закрытия продажи

//------- Подключение внешних модулей -----------------------------------------+
#include <stdlib.mqh> // Стандартная библиотека


//+----------------------------------------------------------------------------+
//| |
//| ПРЕДОПРЕДЕЛЁННЫЕ ФУНКЦИИ |
//| |
//+----------------------------------------------------------------------------+
//| expert initialization function |
//+----------------------------------------------------------------------------+
void init() {
gbNoInit = False;
if (!IsTradeAllowed()) {
Message("Для нормальной работы советника необходимо\n"+
"Разрешить советнику торговать");
gbNoInit=True; return;
}
if (!IsLibrariesAllowed()) {
Message("Для нормальной работы советника необходимо\n"+
"Разрешить импорт из внешних экспертов");
gbNoInit=True; return;
}
if (Operation<-1 || Operation>1) {
Message("Недопустимое значение внешнего параметра Operation");
gbNoInit=True; return;
}
if (symbol!="0" && symbol!="") {
if (MarketInfo(StringUpper(symbol), MODE_BID)==0) {
Message("В обзоре рынка отсутствует символ "+symbol);
gbNoInit=True; return;
}
}
if (!IsTesting()) {
if (IsExpertEnabled()) Message("Советник будет запущен следующим тиком");
else Message("Отжата кнопка \"Разрешить запуск советников\"");
}
}

//+----------------------------------------------------------------------------+
//| expert deinitialization function |
//+----------------------------------------------------------------------------+
void deinit() { if (!IsTesting()) Comment(""); }

//+----------------------------------------------------------------------------+
//| expert start function |
//+----------------------------------------------------------------------------+
void start() {
if (gbNoInit) {
Comment("Не удалось инициализировать советник!"); return;
}
if (!IsTesting()) {
if (NumberAccount>0 && NumberAccount!=AccountNumber()) {
Comment("Работа на счёте: "+AccountNumber()+" ЗАПРЕЩЕНА!");
return;
} else Comment("");
if (ShowComment) {
string st="NumberAccount="+DoubleToStr(NumberAccount, 0)
+" Symbol="+IIFs(symbol=="0", "All", IIFs(symbol=="", Symbol(), StringUpper(symbol)))
+" Operation="+IIFs(Operation<0, "All", GetNameOP(Operation))
+" Loss="+DoubleToStr(Loss, 2)+" "+AccountCurrency()
+" MagicNumber="+DoubleToStr(MagicNumber, 0)
+IIFs(ShowComment, " ShowComment", "")
;
Comment(st);
} else Comment("");
}

ClosePosBySizeLossInCurrency(StringUpper(symbol), Operation, MagicNumber, Loss);
}


//+----------------------------------------------------------------------------+
//| |
//| ПОЛЬЗОВАТЕЛЬСКИЕ ФУНКЦИИ |
//| |
//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 19.02.2008 |
//| Описание: Закрытие одной предварительно выбранной позиции |
//+----------------------------------------------------------------------------+
void ClosePosBySelect() {
bool fc;
color clClose;
double ll, pa, pb, pp;
int err, it;

if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
for (it=1; it<=NumberOfTry; it++) {
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
while (!IsTradeAllowed()) Sleep(5000);
RefreshRates();
pa=MarketInfo(OrderSymbol(), MODE_ASK);
pb=MarketInfo(OrderSymbol(), MODE_BID);
if (OrderType()==OP_BUY) {
pp=pb; clClose=clCloseBuy;
} else {
pp=pa; clClose=clCloseSell;
}
ll=OrderLots();
fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
if (fc) {
if (UseSound) PlaySound(NameFileSound); break;
} else {
err=GetLastError();
if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
Print("Error(",err,") Close ",GetNameOP(OrderType())," ",
ErrorDescription(err),", try ",it);
Print(OrderTicket()," Ask=",pa," Bid=",pb," pp=",pp);
Print("sy=",OrderSymbol()," ll=",ll," sl=",OrderStopLoss(),
" tp=",OrderTakeProfit()," mn=",OrderMagicNumber());
Sleep(1000*5);
}
}
} else Print("Некорректная торговая операция. Close ",GetNameOP(OrderType()));
}

//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 25.04.2008 |
//| Описание : Закрытие тех позиций, у которых убыток в валюте депозита |
//| превысил некоторое значение |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| sy - наименование инструмента ("" - любой символ, |
//| NULL - текущий символ) |
//| op - операция (-1 - любая позиция) |

//| mn - MagicNumber (-1 - любой магик) |
//| pr - профит/убыток |
//+----------------------------------------------------------------------------+
void ClosePosBySizeLossInCurrency(string sy="", int op=-1, int mn=-1, double pr=0) {
int i, k=OrdersTotal();

if (sy=="0") sy=Symbol();
for (i=k-1; i>=0; i--) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (mn<0 || OrderMagicNumber()==mn) {
if (OrderProfit()+OrderSwap()<-MathAbs(pr)) ClosePosBySelect();
}
}
}
}
}
}

//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 01.09.2005 |
//| Описание : Возвращает наименование торговой операции |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| op - идентификатор торговой операции |
//+----------------------------------------------------------------------------+
string GetNameOP(int op) {
switch (op) {
case OP_BUY : return("Buy");
case OP_SELL : return("Sell");
case OP_BUYLIMIT : return("Buy Limit");
case OP_SELLLIMIT: return("Sell Limit");
case OP_BUYSTOP : return("Buy Stop");
case OP_SELLSTOP : return("Sell Stop");
default : return("Unknown Operation");
}
}

//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 01.02.2008 |
//| Описание : Возвращает одно из двух значений взависимости от условия. |
//+----------------------------------------------------------------------------+
string IIFs(bool condition, string ifTrue, string ifFalse) {
if (condition) return(ifTrue); else return(ifFalse);
}

//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 01.09.2005 |
//| Описание : Вывод сообщения в коммент и в журнал |
//+----------------------------------------------------------------------------+
//| Параметры: |
//| m - текст сообщения |
//+----------------------------------------------------------------------------+
void Message(string m) {
Comment(m);
if (StringLen(m)>0) Print(m);
}

//+----------------------------------------------------------------------------+
//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |
//+----------------------------------------------------------------------------+
//| Версия : 01.09.2005 |
//| Описание : Возвращает строку в ВЕРХНЕМ регистре |
//+----------------------------------------------------------------------------+
string StringUpper(string s) {
int c, i, k=StringLen(s), n;
for (i=0; i<k; i++) {
n=0;
c=StringGetChar(s, i);
if (c>96 && c<123) n=c-32; // a-z -> A-Z
if (c>223 && c<256) n=c-32; // а-я -> А-Я
if (c==184) n=168; // ё -> Ё
if (n>0) s=StringSetChar(s, i, n);
}
return(s);
}
//+----------------------------------------------------------------------------+
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
johnfantom



Зарегистрирован: 30.01.2006
Сообщения: 12

СообщениеДобавлено: Пт Янв 02, 2009 6:17 pm    Заголовок сообщения: Re: Библиотеки функций Ответить с цитатой

johnfantom писал(а):


Еще и работает
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
KimIV
Admin


Зарегистрирован: 24.01.2006
Сообщения: 958
Откуда: Кунгур

СообщениеДобавлено: Пт Янв 02, 2009 9:44 pm    Заголовок сообщения: Ответить с цитатой

johnfantom писал(а):
Как обойти ограничение ДЦ по мин. стопу и профиту и также установке ордеров ?

1. Для реализации виртуальных стопов есть функция GetProfitOpenPosInPoint(). Её нужно соединить с функцией ClosePositions().
2. От установки ордеров придётся отказаться. Нужно сделать запоминание ценового уровня установки ордера и входить с рынка, когда цена достигнет запомненного значения.

_________________
Ещё вчера я себе казался умным и пытался изменить мир, а сегодня я стал мудрым и пытаюсь изменить себя...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора Yahoo Messenger
johnfantom



Зарегистрирован: 30.01.2006
Сообщения: 12

СообщениеДобавлено: Пт Янв 02, 2009 10:40 pm    Заголовок сообщения: Ответить с цитатой

KimIV писал(а):
johnfantom писал(а):
Как обойти ограничение ДЦ по мин. стопу и профиту и также установке ордеров ?

1. Для реализации виртуальных стопов есть функция GetProfitOpenPosInPoint().


PHP has encountered an Unhandled Exception Code -1073741795 at 01E13333 Alcoholic
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
johnfantom



Зарегистрирован: 30.01.2006
Сообщения: 12

СообщениеДобавлено: Пт Янв 02, 2009 10:42 pm    Заголовок сообщения: Ответить с цитатой

KimIV писал(а):

Её нужно соединить с функцией ClosePositions().


PHP has encountered an Unhandled Exception Code -1073741795 at 01E13333


Последний раз редактировалось: johnfantom (Пт Янв 02, 2009 10:48 pm), всего редактировалось 2 раз(а)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
johnfantom



Зарегистрирован: 30.01.2006
Сообщения: 12

СообщениеДобавлено: Пт Янв 02, 2009 10:45 pm    Заголовок сообщения: Ответить с цитатой

KimIV писал(а):
johnfantom писал(а):
Как обойти ограничение ДЦ по мин. стопу и профиту и также установке ордеров ?

1. Для реализации виртуальных стопов есть функция GetProfitOpenPosInPoint(). Её нужно соединить с функцией ClosePositions().
2. От установки ордеров придётся отказаться. Нужно сделать запоминание ценового уровня установки ордера и входить с рынка, когда цена достигнет запомненного значения.


Для меня задача не легкая, если оба эти ПрограммингЛиста
есть на лицо, но тем более невыполнима, если их просто нет по указанным линкам ! Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
KimIV
Admin


Зарегистрирован: 24.01.2006
Сообщения: 958
Откуда: Кунгур

СообщениеДобавлено: Пт Янв 02, 2009 11:34 pm    Заголовок сообщения: Ответить с цитатой

Соединить просто:
Код:
extern int vStop=10;
void start() {
  if (GetProfitOpenPosInPoint()<vStop) ClosePositions();
}

Исходники этих функций можете взять у меня на сайте. А то сервера метаквотов почему-то недоступны.

_________________
Ещё вчера я себе казался умным и пытался изменить мир, а сегодня я стал мудрым и пытаюсь изменить себя...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора Yahoo Messenger
johnfantom



Зарегистрирован: 30.01.2006
Сообщения: 12

СообщениеДобавлено: Сб Янв 03, 2009 12:58 am    Заголовок сообщения: Ответить с цитатой

KimIV писал(а):


Игорь , спасибо - и еще раз "С Новым Годом !"
Разберемся мы с этими кодами , никуда они от нас не денутся !

PS. Ну если надо будет ...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
johnfantom



Зарегистрирован: 30.01.2006
Сообщения: 12

СообщениеДобавлено: Вт Янв 20, 2009 12:43 pm    Заголовок сообщения: Ответить с цитатой

KimIV писал(а):
johnfantom писал(а):
Как обойти ограничение ДЦ по мин. стопу и профиту и также установке ордеров ?


2. От установки ордеров придётся отказаться. Нужно сделать запоминание ценового уровня установки ордера и входить с рынка, когда цена достигнет запомненного значения.


Игорь, а можно сделать советник,
который элементарно будет открывать маркет-ордер
по заранее заданному значению цены ?
Может это решит проблему отложенных ордеров ?
У многих ДЦ не дает ставить ордера ближе 15-30 пп.
У меня 60-100 пп .
Может такой есть готовый ? Или подскажи как его сделать?
Если вообще одобришь мою идею.
В том комплекте, кот. ты выкинул, был вроде подобный,
но только компилят и только для демо ...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
paralocus



Зарегистрирован: 08.04.2009
Сообщения: 19

СообщениеДобавлено: Сб Апр 25, 2009 8:35 pm    Заголовок сообщения: Ответить с цитатой

Игорь, подскажите плиз, как можно использовать в тестируемом советнике ваши тралы. Я пробовал их подключать, но из функций тралов вызывается только "взрослая" OrderModify, которая в тестере не работает. Вобщем, нужен "детский" трал для советника, но чтобы потом, при замене библиотеки на взрослую все работало. Подскажите что-нибудь.
С уважением.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
KimIV
Admin


Зарегистрирован: 24.01.2006
Сообщения: 958
Откуда: Кунгур

СообщениеДобавлено: Сб Апр 25, 2009 8:47 pm    Заголовок сообщения: Ответить с цитатой

paralocus писал(а):
которая в тестере не работает

Приведите доказательства

_________________
Ещё вчера я себе казался умным и пытался изменить мир, а сегодня я стал мудрым и пытаюсь изменить себя...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора Yahoo Messenger
paralocus



Зарегистрирован: 08.04.2009
Сообщения: 19

СообщениеДобавлено: Сб Апр 25, 2009 8:55 pm    Заголовок сообщения: Ответить с цитатой

Дык вот же:

if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
paralocus



Зарегистрирован: 08.04.2009
Сообщения: 19

СообщениеДобавлено: Сб Апр 25, 2009 8:56 pm    Заголовок сообщения: Ответить с цитатой

Или я что-то не так понял?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов Автоматизация торговли на финансовых рынках -> Программирование в MQL4 Часовой пояс: GMT + 5
На страницу Пред.  1, 2, 3, 4, 5, 6  След.
Страница 4 из 6

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете добавлять вложения в этом форуме
Вы не можете просматривать вложения в этом форуме
Рейтинг@Mail.ru


Powered by phpBB © 2001, 2005 phpBB Group