| / | Форум |
|
kombat
20.03.2008 21:05
Спасиб за принятие... ;) Что такое И, ИЛИ, НЕ Или например это: Простите что снова поднимаю азы, но это наверное многим начинающим пригодится... Нашел вот для себя готовый код с боевыми условиями обучения. :) |
|
KimIV
20.03.2008 21:24
kombat писал (а): - а вот условие a НЕРАВНО b уже вызывет затруднения... a!=b; |
|
zhuki
20.03.2008 21:39
Мне кажется Игорь Вы несколько отклонились от темы и перешли на объяснения.
Если позволите хочу предложить Функцию которая показывает что либо в ярлыке панели задач . Я её использую для наблюдения за работой советников на работе не окрывая терминал (много посторонних любопытных глаз). она также и вдругих случаях может быть полезной. //----------- Функция визуализации в панели задач ------------------------------------- void ProfMT(string X) { int hwnd1 = WindowHandle(Symbol(), Period()); int hwnd_parent1 = 0; while (!IsStopped()) { hwnd1= GetParent(hwnd1); if (hwnd1 == 0) break; hwnd_parent1 = hwnd1; } if (hwnd_parent1 != 0) SetWindowTextA(hwnd_parent1,X); } Спасибо. |
|
kombat
20.03.2008 21:44
Вооот... где ж ещё так быстро познаешь истину как не на форуме... ;) Спасиб! и сорри что отполз от темы. |
|
KimIV
21.03.2008 07:11
Функция OpenPosition() для тестера.Предназначена для открытия позиций - совершения торговых операций покупки или продажи по рыночным ценам. Функция универсальная, мультивалютная, то есть позволяет открывать позиции по любому инструменту, а не только по текущему. Например, советник может быть запущен на графике EURUSD, а торговать USDCAD. //+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 13.06.2007 | //| Описание : Открытие позиции. Версия функции для тестов на истории. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - текущий символ) | //| op - операция | //| ll - лот | //| sl - уровень стоп | //| tp - уровень тейк | //| mn - MagicNumber | //+----------------------------------------------------------------------------+ void OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) { color clOpen; double pp; int err, ticket; if (sy=="") sy=Symbol(); if (op==OP_BUY) { pp=MarketInfo(sy, MODE_ASK); clOpen=clOpenBuy; } else { pp=MarketInfo(sy, MODE_BID); clOpen=clOpenSell; } ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, "", mn, 0, clOpen); if (ticket<0) { err=GetLastError(); Print("Error(",err,") open ",GetNameOP(op),": ",ErrorDescription(err)); Print("Ask=",Ask," Bid=",Bid," sy=",sy," ll=",ll, " pp=",pp," sl=",sl," tp=",tp," mn=",mn); } } |
|
KimIV
21.03.2008 07:13
Функция OpenPosition() для online.//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 21.03.2008 | //| Описание : Открывает позицию и возвращает её тикет. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента (NULL или "" - текущий символ) | //| op - операция | //| ll - лот | //| sl - уровень стоп | //| tp - уровень тейк | //| mn - MagicNumber | //+----------------------------------------------------------------------------+ int OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, int mn=0) { color clOpen; datetime ot; double pp, pa, pb; int dg, err, it, ticket=0; string lsComm=WindowExpertName()+" "+GetNameTF(Period()); if (sy=="" || sy=="0") sy=Symbol(); if (op==OP_BUY) clOpen=clOpenBuy; else clOpen=clOpenSell; for (it=1; it<=NumberOfTry; it++) { if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) { Print("OpenPosition(): Остановка работы функции"); break; } while (!IsTradeAllowed()) Sleep(5000); RefreshRates(); dg=MarketInfo(sy, MODE_DIGITS); pa=MarketInfo(sy, MODE_ASK); pb=MarketInfo(sy, MODE_BID); if (op==OP_BUY) pp=pa; else pp=pb; pp=NormalizeDouble(pp, dg); ot=TimeCurrent(); ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, lsComm, mn, 0, clOpen); if (ticket>0) { if (UseSound) PlaySound(NameFileSound); break; } else { err=GetLastError(); if (pa==0 && pb==0) Message("Проверьте в Обзоре рынка наличие символа "+sy); // Вывод сообщения об ошибке Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it); Print("Ask=",pa," Bid=",pb," sy=",sy," ll=",ll," op=",GetNameOP(op), " pp=",pp," sl=",sl," tp=",tp," mn=",mn); // Блокировка работы советника if (err==2 || err==64 || err==65 || err==133) { gbDisabled=True; break; } // Длительная пауза if (err==4 || err==131 || err==132) { Sleep(1000*300); break; } if (err==128 || err==142 || err==143) { Sleep(1000*66.666); if (ExistPositions(sy, op, mn, ot)) { if (UseSound) PlaySound(NameFileSound); break; } } if (err==140 || err==148 || err==4110 || err==4111) break; if (err==141) Sleep(1000*100); if (err==145) Sleep(1000*17); if (err==146) while (IsTradeContextBusy()) Sleep(1000*11); if (err!=135) Sleep(1000*7.7); } } return(ticket); } |
|
KimIV
21.03.2008 07:25
Примеры использования функции OpenPosition().1. Купить 0.1 лота текущего инструмента OpenPosition(NULL, OP_BUY, 0.1); 2. Продать 0.2 лота EURUSD string sy="EURUSD"; double pa=MarketInfo("EURUSD", MODE_ASK); double pb=MarketInfo("EURUSD", MODE_BID); double po=MarketInfo("EURUSD", MODE_POINT); OpenPosition(sy, OP_SELL, 0.2); 3. Продать 0.12 лота USDCAD со стопом 20 пунктов string sy="USDCAD"; double pa=MarketInfo("USDCAD", MODE_ASK); double pb=MarketInfo("USDCAD", MODE_BID); double po=MarketInfo("USDCAD", MODE_POINT); OpenPosition("USDCAD", OP_SELL, 0.12, pb+20*po); 4. Купить 0.15 лота USDJPY с тейком 40 пунктов string sy="USDJPY"; double pa=MarketInfo("USDJPY", MODE_ASK); double pb=MarketInfo("USDJPY", MODE_BID); double po=MarketInfo("USDJPY", MODE_POINT); OpenPosition("USDJPY", OP_BUY, 0.15, 0, pa+40*po); 5. Продать 0.1 лота GBPJPY со стопом 23 и тейком 44 пункта string sy="GBPJPY"; double pa=MarketInfo("GBPJPY", MODE_ASK); double pb=MarketInfo("GBPJPY", MODE_BID); double po=MarketInfo("GBPJPY", MODE_POINT); OpenPosition("GBPJPY", OP_SELL, 0.1, pb+23*po, pb-44*po);В прицепе скрипт для тестирования функции OpenPosition(). Первые 4 примера закомментированы. |
|
Lukyanov
21.03.2008 12:50
KimIV писал (а):
А почему бы lsComm не вынести в параметры функции?
Например так:
Функция OpenPosition() для online.//+----------------------------------------------------------------------------+ int OpenPosition(string sy, int op, double ll, double sl=0, double tp=0, string lsComm="", int mn=0) {Имхо, "гибкость" функции расширяется.. |
|
KimIV
21.03.2008 13:19
Lukyanov писал (а): Не возражаю... В смысле разрешаю Вам это сделать :-)А почему бы lsComm не вынести в параметры функции? Имхо, "гибкость" функции расширяется.. |
|
Lukyanov
21.03.2008 15:02
Для себя так и сделал. Просто может кому пригодиться. :-)
|