Советник Cobra Night EURCHF V1.5

  • Автор темы Автор темы ever2
  • Дата начала Дата начала

ever2

Местный житель
ever2,Добрый день! Имеется ли возможность поставить на контрольную панель радиокнопки наподобие "short", "long", "full". Для полуавтомата было бы очень удобно(особенно если по двум или более парам стоишь), а на тестере в полуавтомате без них не обойтись!

сделал радио-кнопки
 

Вложения

kab1973

Новичок форума
Назначение этих кнопок - запрещать роботу открывать сделки в указанном направлении, short на sell, long - buy, full полностью? При включенном значении - разрешено, вы выключенном - запрещено. Правильно я понял?
 

jksmirnoff

Местный знаток
ever2,Добрый день! Имеется ли возможность поставить на контрольную панель радиокнопки наподобие "short", "long", "full". Для полуавтомата было бы очень удобно(особенно если по двум или более парам стоишь), а на тестере в полуавтомате без них не обойтись!

Я то думал, что присутсвующий народ хоть чуточку знает мт4....
Во вкладках "Общие" есть выбор: только лонг, только селл и олл. Что в реале что в тестерном варианте... нахрена вам кнопка в советнике???!!!
Мучаете программеров только, а идей как не было так и нет дельных, а жаль.
Я пока добавил в подобные советники границы торговли дабы не открывать первые продажи близко к историческим недавним максимумам. На продажи так же.
Дымаю, может какой-либо боллинджер стаошего тф в фильтр вместо канала для автомата.... но это просто мысли в слух..
 

pafn61

Активный участник
jksmirnoff,
Я то думал, что присутсвующий народ хоть чуточку знает мт4....
Не внимательно читали мой пост, придется повторить "Для полуавтомата было бы очень удобно(особенно если по двум или более парам стоишь), а на тестере в полуавтомате без них не обойтись!"
 
Последнее редактирование:

jksmirnoff

Местный знаток
Что такое в тестере ПОЛУ автомат я не в курсе. Тестер сам в автомате покупает и продаёт. А настройки выставляете какие сами пожелаете.
 

Вложения

  • OnlyLong.jpg
    OnlyLong.jpg
    167,5 КБ · Просмотры: 47
  • OnlyLong.png
    OnlyLong.png
    28,4 КБ · Просмотры: 39

pafn61

Активный участник
Что такое в тестере ПОЛУ автомат я не в курсе. Тестер сам в автомате покупает и продаёт. А настройки выставляете какие сами пожелаете.
Запустили тест в визуальном режиме,кнопку на панели "manual trading" нажали, увидили свой сетап на покупку, нажали флажок "long", кнопку "Buy"и кнопку "auto trading", советник подхватил сделку, когда движение закончилось, жмем "Stop trading".
Для продаж все то же самое, только флаг "short". Используйте свой шаблон и свои правила входа, а сопровождение сделок оставьте для алгоритма советника, все это доступно на тестере. Я описал лишь один из возможных сценариев теста своей стратегии с помощью этого советника. Вот так я понимаю полуавтомат. Изменять "только бай" или "только шорт" методами терминала можно, но для этого придется прервать тест, это совсем плохо. А в реальной торговле любой из нас рано или поздно забудет что стоит "только бай(шорт)", наличие флажков на панели помогает избежать этого.
 
Последнее редактирование:

giliman

Прохожий
Могу я вас еще раз попросить расписать хотя бы пункты влияющие на работу советника. Спасибо заранее!!
GMTMode - Настройка
GMToffsetManual-
str01=----- Working time (GMT+0) -----
UseWorkingTime=false
TimeStart=16:00 задать время запуска советника
TimeStopNewOrder=04:00 ограничение по времени открытия новых ордеров. Старые ордера робот закроет самостоятельно (это занчит по прибыли или в любом состоянии в это время??)
UseTimeStop=false Это что?
TimeStop=08:00 время отсечки, после которого закрываются все сделки
EnableTradingFriday=false
EnableTradingMonday=true
str08=----- Main Parameters -----
UseTradeType -настройка автоматического или полуавтоматического режима.
UseStrategy=1
UseOrderType- режим выставления ордеров. Советник Cobra Night рассчитывает ценовые уровни, по которым выставляет ордера двух типов – отложенные (сразу после расчета), по рынку – после пересечения расчетных уровней котировками.
MaxSpread - Максимльный спред
TakeProfit - ТП
StopLoss - Стоплос
StopTradingAfterStopLoss=false
str09=----- Rollback Prices Strategy -----
PeriodForPendingOrder - временной интервал между открытием ордеров. По умолчанию стоит значение в тиках. Это позволяет оперативно наращивать и закрывать позицию в буквальном смысле «внутри свечи».
PeriodForPendingCustom=3
PipsStep - шаг сетки. Шаг соответствует минимальному изменению значения цены в Метатрейдере (последнему знаку), поэтому для четырехзначных счетов – это будет 1 пипс, для пятизначных – 0,1 пипса.
UsePipsStepProgression=true
PipsStepCoeff=1.4
PipsStepCoeffOrderStart=5
MaxOrders Максимальное количество ордеров в сетке
Distance- расстояние от KAMA, до первого ордера, открываемого после смены режима. Параметр измеряется в пипсах, используйте значение средней волатильности, чтобы вычислить отклонение для каждого таймфрейма.
KAMAPeriod - настройки скользящей средней Кауфмана.
FastMAPeriod=2
SlowMAPeriod=30
ProfitCoeff=1.0
CloseAtMidnight - закрытие ордеров по условию профита в полночь, чтобы избежать свопа
MidnightProfitCoeff - Коэфициент в чем?
str10=----- RSI Indicator -----
UseRSI=true
RSIperiod=14
SellLevel=70.0
BuyLevel=30.0
str11=----- Martingale -----режим простой сетки без увеличения ордеров или Мартингейл тактика
UseMartingale=true
UseProgression=1
ArithmeticalCoeff=0.01
GeometricCoeff=1.4
str12=----- Break-Even -----
UseBreakEven=false
BreakEvenAfter=30
BreakEvenTo=10
UseBreakEvenAfterXStep=false
XStep=5
str13=----- Trailing-Stop -----
UseTrailingStop=false
TrailingStop=90
TrailingStep=10
str21=----- Money-Management -----
LotType=2
LotFix=0.01
LotMax=200.0
Risk=0.2
CommssionPerLot=15.0
UseEquityStop=false
TotalEquityRisk=30.0
str0=----- News -----
MinBefore=5
MinAfter=5
VHigh=true
VMedium=true
VLow=false
NewsSymb=GBP,EUR
DrawLines=true
Next=false
Signal=false
HighColor=255
MediumColor=16711680
LowColor=65280
Style=2
str1=--------------
EnableControlPanel=true
EnableInfoPanel=true
EnablePotentialProfitLine=true
PotentialProfitLineColor=32768
EnableOrderProfitInformation=true
OrderProfitInformation=3
InpFontSize=12
InpColor=255
str05=----- Voice -----
EnableVoice=false
VoiceLanguage=2
UseVoiceTime=true
VoiceTimeStartGMT0=04:00
VoiceTimeStopGMT0=18:00
Slippage=3
Magic_Number=7396283
 
Последнее редактирование модератором:

Badonis

Новичок форума
Для пользователя giliman.

Все параметры важны, все параметры нужны...

Вам предлагали почитать описание... если вы не нашли его, вот прямая ссылка
https://forexsystemsru.com/1232564-post17.html

Если вы не пониманеет что там написано, тогда это плохо, совсем не хорошо.
 
Последнее редактирование:

pafn61

Активный участник
giliman,просьба! Прячьте длинный текст под спойлер! Тяжко по ветке будет ходить!:)
 

kab1973

Новичок форума
Что за параметр ProfitOneTick ? Где-то я пропустил его описание.
 

ever2

Местный житель
Что за параметр ProfitOneTick ? Где-то я пропустил его описание.

нужен для построения линии потенциального профита. Означает Размер минимального изменения цены инструмента в валюте депозита. Для питизнака это стоимость при изменении цены на 0.00001.
Можно было конечно читать MODE_TICKVALUE. Но вынес как отдельная настройка.
 

pafn61

Активный участник
нужен для построения линии потенциального профита. Означает Размер минимального изменения цены инструмента в валюте депозита. Для питизнака это стоимость при изменении цены на 0.00001.
Можно было конечно читать MODE_TICKVALUE. Но вынес как отдельная настройка.

Уязвимое место! MODE_TICKVALUE конечно, никуда не годится, но и предложенный подход не совсем корректен, значение стоимости изменения цены за пипс динамично, придется все время корректировать. Или я ошибаюсь?
 

ever2

Местный житель
Уязвимое место! MODE_TICKVALUE конечно, никуда не годится, но и предложенный подход не совсем корректен, значение стоимости изменения цены за пипс динамично, придется все время корректировать. Или я ошибаюсь?

ну если вы торганете на пятизнаке лотом 0.01 и цена изменится на один тик, сколько будет профит. Наверно 0.01 USD - один цент. И это значение насколько я знаю не меняется у большинства брокеров. На рублевом счете это значение другое конечно. Торганите на демо-рублевом счете лотом 0.01 и посмотрите сколько стоит один тик.
 

pafn61

Активный участник
Пример, AUDUSD цена лота 100 000 AUD, относительно не долларовой валюты депозита значение ProfitOneTick будет меняться с ростом или падением AUDUSD. Примерно так. (исправил ошибку, извините)
 
Последнее редактирование:

pafn61

Активный участник
Проще, Пункт = Размер тика * Размер лота / котировку . Изменилась котировка - изменилась цена пункта.(для прямых котировок)
 
Последнее редактирование:

pafn61

Активный участник
К сожалению, я не прогер, но активно интересуюсь!
В тему почитал интересную (для меня) статью с соседнего форума _http://mql.opentraders.ru/25225.html. Если пригодится, буду рад.
Расчет уровня БУ (методы, формулы и примеры кода)

• Программирование на MQL
В нескольких топиках довелось участвовать в сраче обсуждении того, как рассчитывать уровень без убытка…
И вроде бы не сложный вопрос, вызывает порой серьезные затруднения и буйный полет фантазии в решениях
На самом деле все очень просто. Расскажу как это делаю я

1. Расчет уровня БУ без учета комиссий, свопов и прочего. Чистое арифметическое среднее.

Из со школы все знают формулу
h_1500398900_1447337_18f0b77744.jpeg


или простой наглядный пример
h_1500399040_3431408_7f7a996c42.jpeg



Применение этой формулы в коде:




Код:
Expand Collapse Copy
double lots=0;
   double sum=0;
   for (int i=0; i<OrdersTotal(); i++)
   {
      if (!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
      if (OrderSymbol()!=Symbol()) continue;
      if (OrderType()==OP_BUY)
      {
         lots=lots+OrderLots();
         sum=sum+OrderLots()*OrderOpenPrice();
      }
 
      if (OrderType()==OP_SELL)
      {
         lots=lots-OrderLots();
      sum=sum-OrderLots()*OrderOpenPrice();
      }
   }
   double price=0;
   if (lots!=0) price=sum/lots;

Рассмотрим как это работает:

Сначала посмотрим в конец примера…
Искомый уровень БУ вычисляется здесь price=sum/lots;

А в переменных «lots» и «sum» содержатся данные по открытым ордерам, собираемые в цикле.
Причем для ордеров типа «Buy» данные ордеров берутся со знаком "+", а для «Sell» соответственно с "-".
Делается это из-за того, что ордера противоположного направления, компенсируют друг друга.

Сначала то, что касается переменной «lots»…
Прибавляя объем ордеров (OrderLots) одного типа и вычитая объемы противоположных ордеров, определим — не является ли сумма ордеров равновесной?
Ведь если объем ордеров на покупку, равен объему ордеров на продажу, то уровня без убытка просто не существует.

Теперь рассмотрим, как подсчитывается «sum»…
В ней суммируются произведения цены открытия ордера (OrderOpenPrice), на его объем (OrderLots). Т.е. цена ордера берется столько раз, сколько лотов в этом ордере.

Для примера, если взять два ордера Buy равного объема (пусть объем равен 1) с ценами открытия Pr1= 100 и Pr2=200, то сразу видно что среднее значение равно 150-ти.

А если их объемы будут равны Lot1=2, а Lot2=5? Ведь в таком случае второй ордер будет сильнее влиять на нашу прибыль/убыток.
Учтем это взяв цену первого ордера 2 раза, а цену второго соответственно 5 раз.
И для получения среднего, разделим на количество слагаемых.

(100+100+200+200+200+200+200)/2+5 = (2*100+5*200)/7 = 171,428571(428571)

Таким образом мы приходим в выражению price=sum/lots.
Для практического применения его нужно еще привести к нужному количеству знаков после запятой, но это уже другой вопрос.

2. Расчет уровня БУ с учетом свопов и комиссий.
(далее рассматриваются случаи для наиболее распространенных (в данный момент) долларовых депозитов)

Этот вопрос намного интереснее и не так прост.
Общая идея учета комиссий и свопов, в том, что бы определить, на каком уровне полученный профит компенсирует
начисленные суммы и общий результат сделок будет равен нулю.
Так как комиссии и свопы начисляются не в пунктах, а в валюте депозита, то тут начинает играть роль стоимость одного пункта.
А она зависит от торгуемой пары.

— Так для обратных котировок (EUR/USD, GBP/USD и всех других где доллар стоит в знаменателе) все просто:
Цена пункта = размер пункта * объем позиции

Для 1-го стандартного лота, стоимость одного (4зн) пункта всегда равна 10$.

— Для прямых котировок (USD/JPY, USD/CHF и других, где USD стоит в числителе) уже сложнее… Тут имеет значение текущий курс.
Формула расчета:
Цена пункта = размер пункта * объем позиции / текущий курс

Так как мы рассчитываем цену пункта не по текущему курсу, а по будущему, то расчет уровня БУ уже становится не таким простым.

— И наиболее сложный случай — кроссовые пары (GBP/CHF, EUR/JPY и др.)
Формула для расчета следующая:

Цена пункта = объем позиции * размер пункта * текущая котировка базовой валюты по отношению к USD / текущий курс валютной пары (кросс-курс)

Для примера возьмем GBP/CHF, по курсу 1.4400 франка за 1 фунт, при курсе GBP/USD= 1.5800.

Тогда 1-го лота цена пункта=100000 * 0.0001 * 1.5800 (курс GBP/USD) / 1.4400 = 11 $

В этом случае расчет уровеня БУ становится совершенно не тривиальной задачей,
т.к. требуется знать котировку базовой валюты по отношению к USD на момент достижения этого уровня БУ.

И как же в таком случае быть?
Лично я пришел к выводу, что в практике расчета уровня БУ в советниках, не требуется совершенно точно вычислять уровень БУ.
Если цена находится далеко от предполагаемого уровня, то погрешность вычисления может быть достаточно большой.
Все равно, так как в процессе удержания позиции величина накопленных комиссий и свопов изменяется, то уровень БУ требуется пересчитывать.
И по мере приближения к этому уровню, уточняются значения курсов влияющих на стоимость одного пункта.
А значит и расчет уровня БУ становится точнее.

Общая идея (алгоритм) расчета уровня БУ с учетом комиссий и свопов в следующем:
1. Сначала определяем уровень БУ методом арифметического среднего (см. выше)
2. Далее корректируем найденное значение, для компенсации накопленных начислений.
В этом нам поможет метод MarketInfo(Symbol(), MODE_TICKVALUE), возвращающий размер минимального изменения
цены инструмента в валюте депозита на один стандартный лот.

А вот так это воплощается в коде:




Код:
Expand Collapse Copy
double _lost=0 ;
double _sum=0 ;
double _sumsvop=0;
double ZeroLevelAll=0;
double tickvalue = MarketInfo(Symbol(), MODE_TICKVALUE);

   for(int i=0; i<OrdersTotal(); i++)
     {
      if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
      if(OrderSymbol()!=Symbol()) continue;
      if(OrderType()==OP_BUY)
      {
            _lost+=OrderLots();
            _sum+=OrderLots()*OrderOpenPrice(); 
            _sumsvop+=OrderSwap( )+OrderCommission( );
      }
      
      if(OrderType()==OP_SELL)
      {
            _lost-=OrderLots();
            _sum-=OrderLots()*OrderOpenPrice(); 
            _sumsvop+=OrderSwap( )+OrderCommission( );
      }
     }


if (_lost>0)
{ZeroLevelAll=_sum/_lost - (_sumsvop / (tickvalue * (_lost)) * Point);   //уровень безубытка для открытых ордеров, перевес Buy
}

if (_lost<0)
{ZeroLevelAll=_sum/_lost + (_sumsvop/ (tickvalue * (_lost)) * Point);  //уровень безубытка для открытых ордеров, перевес Sell
}


Программный код отличается предыдущего:
— подсчетом суммы свопов и комиссий: _sumsvop+=OrderSwap( )+OrderCommission( )
— Формулой расчета уровня БУ:
ZeroLevelAll=_sum/_lost ± (_sumsvop / (tickvalue * (_lost)) * Point), в которой
первое слагаемое _sum/_lost — расчет арифметического среднего,
а второе (_sumsvop/ (tickvalue * (_lost)) * Point) — коррекция зависящая
от накопленной суммы и направления несбалансированной позиции.( Переведенная в пункты изменения цены)

ПС: В приведенных примерах рассчитывается БУ для всех ордеров (Buy и Sell) по паре.
Для расчета отодельно по Buy или Sell достаточно в теле цикла закоментировать строки относящиеся к ненужным типам ордеров.
 
Последнее редактирование:

pafn61

Активный участник
ever2, добрый день! Возник еще один вопрос. Кнопка стоп трейд полностью замораживает торговлю, это не всегда удобно. Пример, сделка в отрицательной зоне и требуется усреднение. Может быть, лучше разрешить закончить цикл усреднения открытой сделке а открытие новых позиций по сигналу индикаторов запретить?
 
Верх