Добрый вечер!
Задумал соединить две пары в один советник. Сделал это.
Но вдруг засомневался. А сделал так:
extern bool GBP=true; extern bool EUR=true; - - - - - - - - - - - - - - - - - - - - int start() { double A = iRSI("GBPUSD", 0, .....); double B = iRSI("GBPUSD", 0, .....); double C = iRSI("EURUSD", 0, .....); double D = iRSI("EURUSD", 0, .....); //------------------------------------------------------ if (GBP) {//если есть разрешение true if (A<B) { double BID = MarketInfo("GBPUSD", MODE_BID); double ASK = MarketInfo("GBPUSD", MODE_ASK); double POINT =MarketInfo("GBPUSD",MODE_POINT); (ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...) }}} //---------------------------------------------------------- if (EUR) { //если есть разрешение true if (C>D) { double BID = MarketInfo("EURUSD", MODE____BID); double ASK = MarketInfo("EURUSD", MODE____ASK); double POINT =MarketInfo("EURUSD",MODE____POINT); (ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...) }}} //------------------------------------------------------------ return(0); }
В онлайне и в тестере всё работает! Может сделано не совсем правильно? а надо бы сделать так:
extern bool GBP=true; extern bool EUR=true; - - - - - - - - - - - - - - - - - - - - int start() { //------------------------------------------------------ if (GBP) //если есть разрешение true{ double C = iRSI("GBPUSD", 0, .....); double D = iRSI("GBPUSD", 0, .....); if (A<B) { double BID = MarketInfo("GBPUSD", MODE_BID); double ASK = MarketInfo("GBPUSD", MODE_ASK); double POINT =MarketInfo("GBPUSD",MODE_POINT); (ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...) }}} //---------------------------------------------------------- if (EUR) { //если есть разрешение true double C = iRSI("EURUSD", 0, .....); double D = iRSI("EURUSD", 0, .....); if (C>D) { double BID = MarketInfo("EURUSD", MODE____BID); double ASK = MarketInfo("EURUSD", MODE____ASK); double POINT =MarketInfo("EURUSD",MODE____POINT); (ticket=OrderSend .... //ПОКУПАЕМ/ПРОДАЕМ...) }}} //------------------------------------------------------------ return(0); }Второй вариант тоже в тестере вроде работает.
Но как будет лучше сделать?
я обычно вычисляю все значения индикаторов в начале, то-бишь вариант 1, так проще, не запутаешься и код более структурирован.
Спасибо! За ответ. И ещё вопрос. Никак не хотят работать трейлинг стопы. По отдельности в тестере работают!
А в онлайне по одной паре работает. Но по другой печатает ошибку - сразу при включении советника.
Но сделки идут - только без трала по второй паре.
Error 130 modifying SL
int start() { РАСЧЁТ ИНДИКАТОРОВ { ПОКУПКА/ПРОДАЖА } for (int j=0; j<OrdersTotal(); j++) { if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()=="GBPUSD" && OrderMagicNumber()==Magic1) { ИДЕТ КОД 1 ТРЕЙЛИНГА. } for (int r=0; r<OrdersTotal(); r++) { if (OrderSelect(r, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()=="EURUSD" && OrderMagicNumber()==Magic2) { ИДЕТ КОД 2 ТРЕЙЛИНГА } return(0); }Коды трейлингов одинаковые, но внешние и внутр. переменные заданы разными символами.
Не могу разобраться, в чем дело. Может подскажет кто?
int start() { //РАСЧЁТ ИНДИКАТОРОВ //ПОКУПКА/ПРОДАЖА for (int j=0; j<OrdersTotal(); j++) { if (OrderSelect(j, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()=="GBPUSD" && OrderMagicNumber()==Magic1) { ИДЕТ КОД 1 ТРЕЙЛИНГА. } if (OrderSymbol()=="EURUSD" && OrderMagicNumber()==Magic2) { ИДЕТ КОД 2 ТРЕЙЛИНГА } } } return(0); }
Попробую, спасибо.
Вроде бы заработало!
Ошибку пока не печатает. Жду профита для проверки трала.
Еще есть вопросы. Если не трудно.
Нигде практически нет простейших примеров мультивалютных эксперитов. А где есть - там не для слабого ума. Всего наворочено - не разобраться.
в моем коде есть :
double BID = MarketInfo("GBPUSD", MODE_BID); double ASK = MarketInfo("GBPUSD", MODE_ASK); double POINT =MarketInfo("GBPUSD",MODE_POINT); //-------Проверяем условие на покупку------------- if (
Однако в редких примерах на этом сайте при аналогичном блоке присутствует строка:
RefreshRates(); double BID = MarketInfo("GBPUSD", MODE_BID); double ASK = MarketInfo("GBPUSD", MODE_ASK); double POINT =MarketInfo("GBPUSD",MODE_POINT);
Я ТОЖЕ вставил эту строку. Скомпелировалось. Но изменений не замечаю в работе.
Насколько она здесь необходима? Возможно её нужно оставить в моем советнике?. Он работает по всем тикам. И там используется массив значений -
//------заполняем массив значениями RSI GBPUSD ----------- double RSI_array[30]; int i=0; while (i<31) { RSI_array[i]=iRSI("GBPUSD",0,GBPUSD_period,3,3,MODE_SMA,0,MODE_MAIN,i); i++;
1. в расчете индикаторов указывать конкретные валюты и временные интервалы, например: iRSI("GBPUSD",60,GBPUSD_period,3,3,MODE_SMA,0,MODE_MAIN,i); //кстати вот и ошибка
2. получать с помощью MarketInfo цены, пункты и т.д.
3. вместо например Low[0] использовать iLow(...)
и пиши, хоть на все валютные пары.
Удачи.
Понял про ошибку! Вместо "0" - проставил в переменных индикаторов по валютам - тф, на котором работает советник.
Работает вроде мой эксперт без сбоев. И тралы работают.
И ещё, надеюсь, последний вопрос. Вставил ещё одну. Третью пару. Но вызвал не встроенный, а пользовательский индикатор. В тестере эта пара работает. А вот в онлайне, - не хочет! Печатает что-то непонятное: почти каждую секунду этот индюк ставится и удаляется. ..... - может что посоветуете?
//***************************************************************
kLerk ! Из всех присутствующих специалистов за неделю - лишь Вы один откликнулись на мой вопрос. И я получил ответы, которые меня в основном устраивают. ( За исключ. вопроса о RefreshRates() )
Прошу Вас поставить здесь ваш адрес эл. почты.
Я, в знак благодарности, пришлю вам простой торговый "Грааль" - советник!, кот. придумал мой хороший приятель.(согласовано). Работаю с ним при ручном подтверждении. Используется всего два встроенных индюка.
Без иронии, -то что это действительно почти "Грааль"(при некот. навыке работы с ним), - ВЫ убедитесть через неск. минут после его получения! Впрочем - пусть посмотрят все :
Символ ---------
Период 30 Минут (M30) 2007.01.02 11:00 - 2007.08.15 00:00
Модель Все тики (на основе всех наименьших доступных периодов с фрактальной интерполяцией каждого тика)
Качество моделирования 67.35%
Начальный депозит 10000.00
Чистая прибыль 4009.24
Общая прибыль 6335.06 Общий убыток -2325.82
Прибыльность 2.72 Матожидание выигрыша 21.44
Максимальная просадка 245.63 (2.18%) Относительная просадка 2.18% (245. 63)
Всего сделок 187
Короткие позиции (% выигравших) 71 (80.28%)
Длинные позиции (% выигравших) 116 (68.10%)
Прибыльные сделки (% от всех) 136 (72.73%)
Убыточные сделки (% от всех) 51 (27.27%)
Самая большая прибыльная сделка 145.02, убыточная сделка -47. 77
Средняя прибыльная сделка 46.58, убыточная сделка -45.60
Максимальное количество непрерывных выигрышей (прибыль) 9 (586. 96)
непрерывных проигрышей (убыток) 4 (-189.99
А вот график теста вне репрезент. выборки за ноябрь/дек. предыд. 2006 года:
Скорее всего, фактические параметры, с которыми вызывается пользовательский индикатор, не соответствуют формальным, перечисленным с ключом extern в листинге (число, порядок, тип, ...). Довольно распространенная ошибка.

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Добрый вечер!
Задумал соединить две пары в один советник. Сделал это.
Но вдруг засомневался. А сделал так:
В онлайне и в тестере всё работает! Может сделано не совсем правильно? а надо бы сделать так:
Второй вариант тоже в тестере вроде работает.Но как будет лучше сделать?