Уважаемый Игорь! Извиняюсь, если кого-то обидел... На самом деле я не критиковал, жаль, что это так выглядит. В любом случае, выложенный прототип ещё не раз будет корректироваться и уточняться. Чтобы не было головомоек (на авторство я никогда не претендовал) в дальнейшем буду присылать Вам труд на авторскую правку. Для себя первым этапом вижу пока 25 страниц. Как закончу - пришлю на адрес, указанный на Вашем сайте. Спасибо за бесценный труд и бескорыстный обмен опытом!!!
Думаю, что возможно. Надо, видимо, на каждом уровне (при пересечении) проверять, - какой текущий размер лота у открытой позиции. И именно по этому критерию реализовать механизм закрытия !
Такие фунции (возвращают размер лота) есть в этой ветке. Посмотрите стр. 17 и 27
Очень вам благодарен ! Ура !Теперь я смогу двигаться дальше.Большое спасибо !
Для того, что бы определить, нужны или нет дополнительные проверки по размеру лота в функции OpenPosition(), необходимо видеть, как ты рассчитываешь размер лота и как она и где вызывается, не увидел в ветке эту функцию
Привет KimIV.отправлял одну вещь придется обратно писать. Короче в программировании бум-бум я. и вообще на трейдера учусь 3 неделю. грамматика тоже храмает.
вот. Вопрос такой. Можно ли по индикатору CCi сделать советник? ча напишу какой и покажу.
Уровни CCi 250, 50, -50, -250. Смысл в том, чтоб допустим при достижении(пересекании) -50 и 50 соответственно, совершалась продажа и покупка соответствеено. Рассмотрим когда сделка должна прекратьтся:
1Тогда, когда (допустим идет продажа) график пересечев -250, пересекает в обратном направлении -250(на картинке видно)
2 График не достигнув -250 пересекает обратно -50
Для покупки то-же самое только наоборот.
Катировка Евро/Доллар, тайм фрейм любой.
Сколько будет стоить такой плюшевый советник????
Может за такую же цену можете предложить что-то получше???
Заранее спасибо. Надеюсь отправится. Ну а я пошел на курсы по FOREX.
Кстати, на forex е реально зарабатывать на хлеб с маслом????
Может лучше вызывать вот так OpenPosition("GBPJPY", OP_SELL, 0.1, 23, 44);
Данное предложение, Сергей, повышает удобство при пользовании стопов и тейков, задаваемых в пунктах. А как быть, в случаях, когда стопы и тейки задаются ценовыми уровнями? Например, стоп по хаю или лоу предыдущего бара. Или там по линии какой-нибудь. Переводить в пункты перед вызовом функции, а внутри функции обратно в цены? Это лишние операции. Так что я оставлю как есть.
Функцию GetSizeLot() рассмотрим позднее (кстати, она теперь у меня называется GetLots()). Сначала надо закончить с библиотеками b-ForTest.mqh и b-Positions.mqh
В моих тестовых (предназначенных для использования исключительно в тестере МТ4) версиях советников функция CountOrders() заменяет следующие функции: ExistOrders(), ExistPositions(), NumberOfOrders() и NumberOfPositions(). То есть она может дать информацию о существовании позиции или ордера любого типа, а также сведения о количестве торговых операций каждого типа. Подобная замена имеет свои преимущества, которая выражается в однократном на один тик обращении к базе ордеров и получении всей необходимой информации за раз. А вышеупомянутые функции, особенно при использовании в комплексе, каждая самостоятельно работает с одной и той же базой ордеров и поэтому многократно выполняют одни и те же обращения. В итоге функция CountOrders() позволяет на несколько секунд уменьшить время одного прохода, что даёт часы экономии при оптимизациях.
Функция CountOrders() принимает следующие параметры:
mo - Массив количества ордеров по типам. После отработки функции массив будет иметь 6 (шесть) элементов. Нулевойэлемент - количество торговых операций типа Buy, первыйэлемент - количество Sell, второй - BuyLimit, третий - SellLimit, четвёртый - BuyStop, пятый- SellStop.
mn - Идентификатор позиции или ордеров (MagicNumber). Значение по умолчанию -1 - любой магик.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 03.08.2008 |//| Описание : Рассчитывает количество ордеров по типам. |//+----------------------------------------------------------------------------+//| Параметры: |//| mo - массив количества ордеров по типам |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+void CountOrders(int& mo[],int mn=-1){int i, k=OrdersTotal();if(ArraySize(mo)!=6)ArrayResize(mo,6);for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if(mn<0||OrderMagicNumber()==mn) mo[OrderType()]++;}}}
P.S. Во вложении скрипт для тестирования функции CountOrders() в онлайне.
Добрый день, Игорь и всем тоже. Возникла проблема при использовании функции GetFractalBar(NULL,0, 0). - Возвращает номер бара фрактала по его номеру. Точнее, проблема не с функцией. А где то рядом.
При отображении комментария вот при таком задании всё нормально. ЕСТЬ номер бара в углу графика.
int a;......int start(){//----if(Time[0]== prevtime)return(0);//ждём нового бара
prevtime =Time[0];//если появился новый бар , включаемсяif(isFractalUp()> isFractalDn()){//если это Down-фрактал
a =iLow(NULL,0,GetFractalBar(NULL,0,0));Comment(GetFractalBar(NULL,0,0));}
И при таком вот - тоже всё норм. Отображаются в лев. углу мин. ценовые значения бара с фракталом.
if(isFractalUp()> isFractalDn()){//если это Down-фрактал
a =iLow(NULL,0,GetFractalBar(NULL,0,0));Comment(iLow(NULL,0,GetFractalBar(NULL,0,0)));}
Но далее вообще непонятно ! Как только я вставляю в коммент вместо самой функции переменную "а", то коммент вместо ценового значения возвращает мне в углу единицу ! Вот тут :
if(isFractalUp()< isFractalDn()){
a =iLow(NULL,0,GetFractalBar(NULL,0,0));Comment(a);}
Третий час сижу, не пойму в чем дело! Пож, подскажите, кто может....
Rita писал(а)>> Как только я вставляю в коммент вместо самой функции переменную "а", то коммент вместо ценового значения возвращает мне в углу единицу !
У Вас переменная "а" объявлена, как целочисленная, то есть:
Это облегчённый вариант функции ModifyOrder(), опубликованной на странице 7, и предназначенной для изменения абсолютных ценовых уровней одного предварительно выбранного ордера или позиции.
Функция ModifyOrder() принимает следующие параметры:
pp - Цена установки ордера. Если передать значение меньше или равное нулю, то модификация данного ценового уровня выполнена не будет. Значение по умолчанию -1.
sl - Ценовой уровень стопа. Если передать значение меньше нуля, то модификация данного ценового уровня выполнена не будет. Значение по умолчанию 0.
tp - Ценовой уровень тейка. Если передать значение меньше нуля, то модификация данного ценового уровня выполнена не будет. Значение по умолчанию 0.
ex - Дата истечения отложенного ордера. Значение по умолчанию 0.
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 28.03.2008 |//| Описание : Модификация ордера. Версия функции для тестов на истории. |//+----------------------------------------------------------------------------+//| Параметры: |//| pp - цена открытия позиции, установки ордера |//| sl - ценовой уровень стопа |//| tp - ценовой уровень тейка |//| ex - дата истечения |//+----------------------------------------------------------------------------+void ModifyOrder(double pp=-1,double sl=0,double tp=0,datetime ex=0){int dg=MarketInfo(OrderSymbol(),MODE_DIGITS), er;double op=NormalizeDouble(OrderOpenPrice(), dg);double os=NormalizeDouble(OrderStopLoss(), dg);double ot=NormalizeDouble(OrderTakeProfit(), dg);color cl;if(pp<=0) pp=OrderOpenPrice();if(sl<0) sl=OrderStopLoss();if(tp<0) tp=OrderTakeProfit();
pp=NormalizeDouble(pp, dg);
sl=NormalizeDouble(sl, dg);
tp=NormalizeDouble(tp, dg);if(pp!=op || sl!=os || tp!=ot){if(MathMod(OrderType(),2)==0) cl=clModifyBuy;else cl=clModifySell;if(!OrderModify(OrderTicket(), pp, sl, tp, ex, cl)){
er=GetLastError();Print("Error(",er,") modifying order: ",ErrorDescription(er));Print("Ask=",Ask," Bid=",Bid," sy=",OrderSymbol()," op="+GetNameOP(OrderType())," pp=",pp," sl=",sl," tp=",tp);}}}
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Думаю, что возможно. Надо, видимо, на каждом уровне (при пересечении) проверять, - какой текущий размер лота у открытой позиции. И именно по этому критерию реализовать механизм закрытия !
Такие фунции (возвращают размер лота) есть в этой ветке. Посмотрите стр. 17 и 27
Очень вам благодарен ! Ура !Теперь я смогу двигаться дальше.Большое спасибо !
Для того, что бы определить, нужны или нет дополнительные проверки по размеру лота в функции OpenPosition(), необходимо видеть, как ты рассчитываешь размер лота и как она и где вызывается, не увидел в ветке эту функцию
может я пропустил.
Если рассчитывается вот так https://championship.mql5.com/2012/ru/news, то можно нарваться на 134 ошибку и допустим пролететь с чемпионатом :-)
Привет KimIV.отправлял одну вещь придется обратно писать. Короче в программировании бум-бум я. и вообще на трейдера учусь 3 неделю. грамматика тоже храмает.
вот. Вопрос такой. Можно ли по индикатору CCi сделать советник? ча напишу какой и покажу.
Уровни CCi 250, 50, -50, -250. Смысл в том, чтоб допустим при достижении(пересекании) -50 и 50 соответственно, совершалась продажа и покупка соответствеено. Рассмотрим когда сделка должна прекратьтся:
1Тогда, когда (допустим идет продажа) график пересечев -250, пересекает в обратном направлении -250(на картинке видно)
2 График не достигнув -250 пересекает обратно -50
Для покупки то-же самое только наоборот.
Катировка Евро/Доллар, тайм фрейм любой.
Сколько будет стоить такой плюшевый советник????
Может за такую же цену можете предложить что-то получше???
Заранее спасибо. Надеюсь отправится. Ну а я пошел на курсы по FOREX.
Кстати, на forex е реально зарабатывать на хлеб с маслом????
Приветствую всех.
Вот нашел индикатор, изменил немного - строит неплохие трендовые.
Интересно было бы состряпать функцию... (это типа просьбы то KimIV).
По поводу
OpenPosition("GBPJPY", OP_SELL, 0.1, pb+23*po, pb-44*po);
Может лучше вызывать вот так OpenPosition("GBPJPY", OP_SELL, 0.1, 23, 44);
Данное предложение, Сергей, повышает удобство при пользовании стопов и тейков, задаваемых в пунктах. А как быть, в случаях, когда стопы и тейки задаются ценовыми уровнями? Например, стоп по хаю или лоу предыдущего бара. Или там по линии какой-нибудь. Переводить в пункты перед вызовом функции, а внутри функции обратно в цены? Это лишние операции. Так что я оставлю как есть.
Функцию GetSizeLot() рассмотрим позднее (кстати, она теперь у меня называется GetLots()). Сначала надо закончить с библиотеками b-ForTest.mqh и b-Positions.mqh
Функция CountOrders() для тестера.
В моих тестовых (предназначенных для использования исключительно в тестере МТ4) версиях советников функция CountOrders() заменяет следующие функции: ExistOrders(), ExistPositions(), NumberOfOrders() и NumberOfPositions(). То есть она может дать информацию о существовании позиции или ордера любого типа, а также сведения о количестве торговых операций каждого типа. Подобная замена имеет свои преимущества, которая выражается в однократном на один тик обращении к базе ордеров и получении всей необходимой информации за раз. А вышеупомянутые функции, особенно при использовании в комплексе, каждая самостоятельно работает с одной и той же базой ордеров и поэтому многократно выполняют одни и те же обращения. В итоге функция CountOrders() позволяет на несколько секунд уменьшить время одного прохода, что даёт часы экономии при оптимизациях.
Функция CountOrders() принимает следующие параметры:
P.S. Во вложении скрипт для тестирования функции CountOrders() в онлайне.
Добрый день, Игорь и всем тоже. Возникла проблема при использовании функции GetFractalBar(NULL,0, 0). - Возвращает номер бара фрактала по его номеру. Точнее, проблема не с функцией. А где то рядом.
При отображении комментария вот при таком задании всё нормально. ЕСТЬ номер бара в углу графика.
И при таком вот - тоже всё норм. Отображаются в лев. углу мин. ценовые значения бара с фракталом.
Но далее вообще непонятно ! Как только я вставляю в коммент вместо самой функции переменную "а", то коммент вместо ценового значения возвращает мне в углу единицу ! Вот тут :
Третий час сижу, не пойму в чем дело! Пож, подскажите, кто может....Как только я вставляю в коммент вместо самой функции переменную "а", то коммент вместо ценового значения возвращает мне в углу единицу !
У Вас переменная "а" объявлена, как целочисленная, то есть:
int a;
А надо объявить, как вещественную, то есть:
double a;
Функция ModifyOrder() для тестера.
Это облегчённый вариант функции ModifyOrder(), опубликованной на странице 7, и предназначенной для изменения абсолютных ценовых уровней одного предварительно выбранного ордера или позиции.
Функция ModifyOrder() принимает следующие параметры: