ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Как се създава и тества forex система. Expert Advisors и бектестове на системи за автоматична търговия.
goldrun
Мнения: 116
Регистриран: 09 фев 2014, 14:46
4 получени
4 дадени

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от goldrun » 11 мар 2018, 10:17

Здравейте колеги! Дали ще ми услужите със индикатор който чертае линии по кръглите числа на фигура; половинка; четвърт и 10 пипса в различни цветове? Благодаря предварително! Поздрави и успех в търговията!

Потребителски аватар
flow
Мнения: 228
Регистриран: 16 фев 2014, 12:17
11 получени
50 дадени

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от flow » 29 мар 2018, 19:40

Колеги привет,
Търся индикатор/скрипт/експерт, който да:
- взема стойността от ADR за определен брой дни и изчислява процент от тази стойност, която се ползва за Stop Loss;
- спрямо този Stop Loss и баланса да калкулира размера на лота, като се задава процент риск.

Например в картинката доло:
- ADR = 91.6 пипа за 30 дни;
- Sell Loss в случая е 15% от ADR = 13.7 пипа;
- Обем на сделка според размера на сметката, риск (1%) и Stop Loss(13.7) = 0.02 лота.

Имали нещо такива? И ако някой може да го направи ще съм благодарен. Добре да може да се наглася местоположението по (x,y), цвят и размер на шрифта.

От всичко на картинката само ADR (прикачам индикатора) ми изчислява автоматично и няма как да изчислявам стопа и лота постоянно.... тоест има как, но става бавно. Целта е еднакъв риск за всяка валутна двойка.
Заснемане.PNG
Заснемане.PNG (6.77 KБ) Видяна 588 пъти
Прикачени файлове
Daily Range PeterE.mq4
(2.14 KБ) Свален 9 пъти
Daily Range PeterE.ex4
(9.62 KБ) Свален 8 пъти
If you don't know where you are, find a starting point.

Потребителски аватар
flow
Мнения: 228
Регистриран: 16 фев 2014, 12:17
11 получени
50 дадени

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от flow » 02 апр 2018, 18:10

flow написа:
29 мар 2018, 19:40
Колеги привет,
Търся индикатор/скрипт/експерт, който да:
- взема стойността от ADR за определен брой дни и изчислява процент от тази стойност, която се ползва за Stop Loss;
- спрямо този Stop Loss и баланса да калкулира размера на лота, като се задава процент риск.

Например в картинката доло:
- ADR = 91.6 пипа за 30 дни;
- Sell Loss в случая е 15% от ADR = 13.7 пипа;
- Обем на сделка според размера на сметката, риск (1%) и Stop Loss(13.7) = 0.02 лота.

Имали нещо такива? И ако някой може да го направи ще съм благодарен. Добре да може да се наглася местоположението по (x,y), цвят и размер на шрифта.

От всичко на картинката само ADR (прикачам индикатора) ми изчислява автоматично и няма как да изчислявам стопа и лота постоянно.... тоест има как, но става бавно. Целта е еднакъв риск за всяка валутна двойка.

Заснемане.PNG
Привет Колеги,
сглобиха ми такъв индикатор но има един бъг, който е следния:
след като запаметя настройките на индикатора в темплейт, и същия темплейт го използвам той наслагва стойностите от предно използваната валутна двойка.
risk-template-issue.PNG
risk-template-issue.PNG (28.87 KБ) Видяна 561 пъти
файла е ex4, незнам дали може да се редактира?
Прикачени файлове
risk.ex4
(42.38 KБ) Свален 8 пъти
If you don't know where you are, find a starting point.

vusi
Мнения: 2
Регистриран: 05 апр 2018, 12:55

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от vusi » 05 апр 2018, 13:06

Моля зя помощ. Искам да си инсталирам един индикатор. Имам файловете .mp4 и ex4. Навсякъде пише, че трябва да ги сложа в директориите experts/ indicators. В моята metatrader директория няма такива директории. Освен това там не откривам и директории, в които да има други индикатори. Моля да ми кажете, къде да копирам тези файлове.

Потребителски аватар
flow
Мнения: 228
Регистриран: 16 фев 2014, 12:17
11 получени
50 дадени

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от flow » 05 апр 2018, 13:37

vusi написа:
05 апр 2018, 13:06
Моля зя помощ. Искам да си инсталирам един индикатор. Имам файловете .mp4 и ex4. Навсякъде пише, че трябва да ги сложа в директориите experts/ indicators. В моята metatrader директория няма такива директории. Освен това там не откривам и директории, в които да има други индикатори. Моля да ми кажете, къде да копирам тези файлове.
От MT4 Terminal, File меню, Open Data Folder => MQL4, Indicators.
If you don't know where you are, find a starting point.

vusi
Мнения: 2
Регистриран: 05 апр 2018, 12:55

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от vusi » 05 апр 2018, 13:54

Благодаря ти много flow. Стана, даже и работи. Весели празници!

Потребителски аватар
saxsten
Мнения: 1374
Регистриран: 04 апр 2010, 23:16
11 получени
3 дадени

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от saxsten » 09 апр 2018, 20:03

Нещо съм забравил как се търсеха вече затворените сделки в историята на МТ4
Тука се мъча се един код ама той май нещо не ще да работи:

Код: Избери всички

   int x,cp1,cp2; 
     
    { i=OrdersHistoryTotal()-1;
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true
   && OrderType()==OP_BUY  && OrderProfit()<0)cp1=1;else cp1=0;  cp1++; }    
  {i=OrdersHistoryTotal()-1;
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true
   && OrderType()==OP_SELL  && OrderProfit()<0) cp2=1;else cp2=0; cp2++;} 
    
     x=cp1-cp2;  
Някой не знае ли нещо по подходящо
Форекса е оръжие за масово поразяване

kompira
Мнения: 803
Регистриран: 09 юни 2010, 12:20
42 получени
4 дадени

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от kompira » 09 апр 2018, 21:32

oператор "for"

Код: Избери всички

for(int i=0; i<OrdersHistoryTotal(); i++)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true
// ...
  }

Потребителски аватар
saxsten
Мнения: 1374
Регистриран: 04 апр 2010, 23:16
11 получени
3 дадени

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от saxsten » 09 апр 2018, 23:56

kompira написа:
09 апр 2018, 21:32
oператор "for"

Код: Избери всички

for(int i=0; i<OrdersHistoryTotal(); i++)
  {
    if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true
// ...
  }
Уф! А бе и така го пробвах
Работата е че не трябва цялата история а само последния най скоро затворен ордер
Например:

Код: Избери всички

    int x,cp1,cp2; 
   
  { for(int i=0; i<OrdersHistoryTotal(); i++)
  if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true) 
   if(i=OrdersHistoryTotal()-1 && OrderType()==OP_BUY && OrderProfit()<0)cp1=1;else cp1=0;  cp1++; }    
 
  { for(int i=0; i<OrdersHistoryTotal(); i++)
  if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true) 
   if(i=OrdersHistoryTotal()-1 && OrderType()==OP_BUY && OrderProfit()<0) cp2=1;else cp2=0; cp2++;}     
 
     x=cp1-cp2; 
Може би някъде иска оператор break Знам ли го какво иска
И освен тази задача има и още една малко по сложна Как да преброиме ордерите които са закрити от моментното сървърно време до ,примерно 1 ден назад Тоест да не ги броиме на бройка а на време
Например нещо такова

Код: Избери всички

if(iTime( NULL,PERIOD_H1,0)-iTime( NULL,PERIOD_H1,24)>24*3600 )break
24*3600 защото всичкото се измерва в секунди ,ама дали ще го премери кой да ти каже :(
Форекса е оръжие за масово поразяване

Потребителски аватар
p_dim
Мнения: 419
Регистриран: 12 фев 2013, 17:43
41 получени
53 дадени

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от p_dim » 10 апр 2018, 01:36

Саксе, няма как да минеш без цикъл for, защото задължително трябва да филтрираш по Symbol и по Magic. Иначе може да хванеш последния затворен ордер да е за някой друг инструмент. Ето ти два варианта, лесно ще се ориентиташ:

Код: Избери всички

#include <stdlib.mqh>
#include <stderror.mqh>

input int StrategyID = 123;

double HstLastBUY_PL = 0.0, HstLastSELL_PL = 0.0; 
string tmpSessionInfo = "";

//+------------------------------------------------------------------+
//| Expert tick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
{
...
   GetHistoryTradesInfo(); 
   
}
//+------------------------------------------------------------------+

void GetHistoryTradesInfo(void)
{
   HstLastBUY_PL = 0.0; HstLastSELL_PL = 0.0;
   datetime last_time = 0;
   
   int hstTotal = OrdersHistoryTotal();
     
   for (int ordH = 0; ordH < hstTotal; ordH++)
   {
      if (OrderSelect(ordH,SELECT_BY_POS,MODE_HISTORY) == true) 
      {
         if (OrderSymbol() == _Symbol && OrderMagicNumber() == StrategyID)
         {
            if (OrderCloseTime() > last_time)
            {
               last_time = OrderCloseTime();
               
               if (OrderType() == OP_BUY) HstLastBUY_PL = OrderProfit() + OrderCommission() + OrderSwap();
               if (OrderType() == OP_SELL) HstLastSELL_PL = OrderProfit() + OrderCommission() + OrderSwap();
            }   
         }
      }
      else
      {
         int Err = GetLastError();
         tmpSessionInfo = StringConcatenate("Неуспех при опит за достъп до историята на затворените позиции! ",ErrorDescription(Err)," (Err ",IntegerToString(Err),")");     
         Print(tmpSessionInfo); 
      } 
   }           
}


Код: Избери всички

#include <stdlib.mqh>
#include <stderror.mqh>

input int StrategyID = 123;

double HstBUYsPL = 0.0, HstSELLsPL = 0.0, HstWholePL; 
string tmpSessionInfo = "";

//+------------------------------------------------------------------+
//| Expert tick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
{
   GetHistoryTradesInfo(StringToTime("2017.01.01 08:05:00")); 
// Ще гледа в историята след тази дата и час  

// ИЛИ
   datetime dt = (datetime)(TimeCurrent() - 86400); // Едно денонощие назад, 24 часа = 86400 секунди.
   GetHistoryTradesInfo(dt); 
}
//+------------------------------------------------------------------+

void GetHistoryTradesInfo(datetime hst_start_time)
{
   HstBUYsPL = 0.0; HstSELLsPL = 0.0; 
   // Цялата печалба след зададената дата, за BUY и SELL по отделно 
   int hstTotal = OrdersHistoryTotal();
   
   for (int ordH = 0; ordH < hstTotal; ordH++)
   {
      if (OrderSelect(ordH,SELECT_BY_POS,MODE_HISTORY) == true) 
      {
         if (OrderCloseTime() >= hst_start_time)
         {
            if (OrderSymbol() == _Symbol && OrderMagicNumber() == StrategyID)
            {
               if (OrderType() == OP_BUY) HstBUYsPL += OrderProfit() + OrderCommission() + OrderSwap();
               if (OrderType() == OP_SELL) HstSELLsPL += OrderProfit() + OrderCommission() + OrderSwap();
            }
         }
      }
      else
      {
         int Err = GetLastError();
         tmpSessionInfo = StringConcatenate("Неуспех при опит за достъп до историята на затворените позиции! ",ErrorDescription(Err)," (Err ",IntegerToString(Err),")");     
         Print(tmpSessionInfo); 
      }
   }
   
   HstWholePL = HstBUYsPL + HstSELLsPL; 
   // Цялата печалба след зададената дата           
}

Потребителски аватар
saxsten
Мнения: 1374
Регистриран: 04 апр 2010, 23:16
11 получени
3 дадени

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от saxsten » 11 апр 2018, 12:08

Ей много ме дразнят тия библиотеки
Отивам в тъпата папка инклуде ровя ровя ровя и намирам файла stderror.mqh отварям го и гледам че е някакава фигня да ми търси грешките
Чакай ,викам си да видя другия stdlib.mqh какви ги върши
Никакви не ги върши, праща те за зелен хайвер към #import "stdlib.ex4"
А бе я чупка ог тука и без stderror.mqh и без stdlib.mqh можем да минем
Много мразя някой да ми брои грешките

Иначе Тенко баба за кодовете Поразгледах ги
Е ,то разбира се не ми харесват , ама то всеки си има свой стил на програмиране и обикновенно чуждите стилове не му харесват 8-) :lol: :smile:
Форекса е оръжие за масово поразяване

Потребителски аватар
saxsten
Мнения: 1374
Регистриран: 04 апр 2010, 23:16
11 получени
3 дадени

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от saxsten » 11 апр 2018, 12:18

Това (void) при дефинирането а след това го няма при извикването на функция, ми е нещо мътно
Не може ли още при дефиниато на функцията направо без него
void GetHistoryTradesInfo(void) ==>void GetHistoryTradesInfo()
Форекса е оръжие за масово поразяване

Потребителски аватар
p_dim
Мнения: 419
Регистриран: 12 фев 2013, 17:43
41 получени
53 дадени

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от p_dim » 11 апр 2018, 13:11

С void или без него е едно и също, просто подчертах, че в тоя случай не подаваш параметри. Слагай от твоя червен пипер дето си ти харесва и го пускай да работи :grin:

Потребителски аватар
p_dim
Мнения: 419
Регистриран: 12 фев 2013, 17:43
41 получени
53 дадени

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от p_dim » 11 апр 2018, 19:42

Саксе, да не излезе че съм те подвел. Първия код няма да работи, ако си затварял едновременно по няколко ордера с цикъл. Ако са затворени в една и съща секунда, няма как да се различи кой е последно затвореният. Залухавия MQL записва прецизност на времето само до секунди, а не до милисекунди, иначе всичко щеше да е точно. В масива-списък с история на сделките (от 0 до OrdersHistoryTotal()-1) сортирането е по Тикет, от най-ниския към най-високия, като това е номер поред на поръчката за всички клиенти на брокера (сървъра). По Тикет можеш да сортираш да кажем за да видиш кой е последния отворен ордер, но кой кога е затворен - не е ясно. Все пак единствената алтернатива е преди затварянето на ордера с OrderClose, да му запазиш Тикета в някоя променлива и после да го търсиш в историята пак по Тикет. Той Тикета не се променя. Така хващаш за ушите точния затворен ордер и му вадиш профита. Не ми е известно друго решение.

Потребителски аватар
saxsten
Мнения: 1374
Регистриран: 04 апр 2010, 23:16
11 получени
3 дадени

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от saxsten » 11 апр 2018, 21:20

p_dim написа:
11 апр 2018, 19:42
Саксе, да не излезе че съм те подвел. Първия код няма да работи, ако си затварял едновременно по няколко ордера с цикъл. Ако са затворени в една и съща секунда, няма как да се различи кой е последно затвореният. Залухавия MQL записва прецизност на времето само до секунди, а не до милисекунди, иначе всичко щеше да е точно. В масива-списък с история на сделките (от 0 до OrdersHistoryTotal()-1) сортирането е по Тикет, от най-ниския към най-високия, като това е номер поред на поръчката за всички клиенти на брокера (сървъра). По Тикет можеш да сортираш да кажем за да видиш кой е последния отворен ордер, но кой кога е затворен - не е ясно. Все пак единствената алтернатива е преди затварянето на ордера с OrderClose, да му запазиш Тикета в някоя променлива и после да го търсиш в историята пак по Тикет. Той Тикета не се променя. Така хващаш за ушите точния затворен ордер и му вадиш профита. Не ми е известно друго решение.
А бе кой ще затваря толкози много ордер ба :shock:
Ние сме сиромаси хора ,на нас и полвин ордер ни стига :wink:
По принцип не прекопирам чужди кодове а просто хващам идеята и си правя мои :smile:
Освен това ,което го приказваш май важи за много ордери по един инструмент пък аз ако ще затварям повече от един ордер в секунда те ще са по различни инструменти, така че няма страшно :|
Форекса е оръжие за масово поразяване

Потребителски аватар
saxsten
Мнения: 1374
Регистриран: 04 апр 2010, 23:16
11 получени
3 дадени

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от saxsten » 12 апр 2018, 16:35

Въххх !!!!
Каква хубава функцийка стана
Брои последния затворен ордер дали е бил на печалба или е бил на загуба :smile:

Код: Избери всички


    void HOrder() {    
 
    int   B,S;
   int HTotal = OrdersHistoryTotal();   
   int ctn = OrdersHistoryTotal()-1;   
    
      for (i = 0; i <HTotal; i++) 
     {  if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) == true)    
     {if(i==ctn &&  OrderSymbol() == _Symbol && OrderMagicNumber() == Magic)       
        
   if (OrderType() == OP_BUY && OrderProfit() <0 )B=-1;else B=0; 
   if (OrderType() == OP_SELL &&   OrderProfit()<0 )S=-1;else S=0;        
         
            } } } 

Форекса е оръжие за масово поразяване

Потребителски аватар
p_dim
Мнения: 419
Регистриран: 12 фев 2013, 17:43
41 получени
53 дадени

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от p_dim » 12 апр 2018, 19:39

Така както си го написал, цикъла for е напълно безсмислен. Там ще се предприеме някакво действие само при последния ордер в списъка. Давам ти пример кога кода ти ще сгреши: Губи ти се интернет връзката за десетина минути и точно тогава някоя отворена позиция удря стопа на следения Symbol, а после удря стоп и при някой друг инструмент. Като се възстанови нета, твоя ордер си го изпуснал. Той вече не е последен в списъка и кода ти няма да предприеме действия. Същото ако ти удари два (или повече) стопа/таргета на твоя си Symbol, в периода когато си без връзка със сървъра. Един (или повече) ордера просто ще ги прескочиш. Това е смисъла на цикъла, да провери дали няма изпуснато нещо, за да се възстанови нормалната работа на стратегията.

Потребителски аватар
saxsten
Мнения: 1374
Регистриран: 04 апр 2010, 23:16
11 получени
3 дадени

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от saxsten » 12 апр 2018, 23:34

Бе мааму стара това порфи програмистите се боите и от сянката си :grin:
Много важно че щял да изтърве някой ордер, нали принципа е важен
А приниципа е :
Щом последния ордер е бил губеш отваряй в другата посока :wink:
Апропо по различните инструменти сметката си е за всеки инструмент отделно щото всяко копие на експерта си работи в собствен инф поток :wink:
Така че това дето го разправяш може да стане само при повече от един ударени стопа ама по един инструмент
Чак до там няма да му сееме на дъното ряпа, както се казва :lol:
Прочее дигнах с таз матема печалбата в тестера за 1 год назад с 30-40% което донякъде е добре :|
Форекса е оръжие за масово поразяване

Потребителски аватар
p_dim
Мнения: 419
Регистриран: 12 фев 2013, 17:43
41 получени
53 дадени

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от p_dim » 13 апр 2018, 20:11

:lol: :lol: :lol:
Мчи аз не съм такъв баровец като тебе и не мога да си позволя несериозно да се отнасям към парите ми. В краденето и до ден днешен не ме бива, та се налага по трудния начин да ги печеля :grin: Не ми се рови из архивите, иначе щях да ти покажа един стар стейтмънт да видиш как заради "дребна грешчица" един бот как ми беше затрил 20% от акаунта за броени минути. Задействало се условие дето на бектест никога не се беше задействало и започнал на всеки тик да отваря и съответно да затваря позиции. Т.е. на всеки тик баланса хлътвал с по един спред. Добре, че се беше задействал Силовия Стоп, който спира бота ако се натрупат загуби повече от 20% за сесията, иначе щях да се простя с целия баланс.

Потребителски аватар
saxsten
Мнения: 1374
Регистриран: 04 апр 2010, 23:16
11 получени
3 дадени

Re: ЕА, скриптове, индикатори и т.н. с ОТВОРЕН КОД

Мнение от saxsten » 13 апр 2018, 21:40

p_dim написа:
13 апр 2018, 20:11
:lol: :lol: :lol:
Мчи аз не съм такъв баровец като тебе и не мога да си позволя несериозно да се отнасям към парите ми. В краденето и до ден днешен не ме бива, та се налага по трудния начин да ги печеля :grin: Не ми се рови из архивите, иначе щях да ти покажа един стар стейтмънт да видиш как заради "дребна грешчица" един бот как ми беше затрил 20% от акаунта за броени минути. Задействало се условие дето на бектест никога не се беше задействало и започнал на всеки тик да отваря и съответно да затваря позиции. Т.е. на всеки тик баланса хлътвал с по един спред. Добре, че се беше задействал Силовия Стоп, който спира бота ако се натрупат загуби повече от 20% за сесията, иначе щях да се простя с целия баланс.
Хи! Хи!
Точно сега е момента да река,че и на мене се е случвало,ама по друг начин . :wink:
Преди време забравих два експерта да работят на две графики по един инструмент
Единия отварял ,другия затварял ,след това обратно другия, таковата.... отваря ,и така, така докато ми изпапапали 200 -300 дойлера
Горям кеф !!! :lol:
Форекса е оръжие за масово поразяване

Отговори

Върни се в “FOREX СИГНАЛИ, СИСТЕМИ И СТРАТЕГИИ”

Кой е на линия

Потребители, разглеждащи този форум: Няма регистрирани потребители и 1 гост