Автор Тема: EasyLanguage  (Прочитано 5842 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Craft

  • Участник клуба
  • *
  • Сообщений: 57
    • Просмотр профиля
EasyLanguage
« Ответ #30 : 10 Ноябрь 2012, 08:06:29 »
Всё-таки в МТ (справа на скрине) картина (син. - сентимент покпателей, кр. - продавцов) получается более реалистичная. Может быть качество минутных котировок в QuoteRoom похуже.

Оффлайн ihaar

  • Участник клуба
  • *
  • Сообщений: 1 072
    • Просмотр профиля
EasyLanguage
« Ответ #31 : 10 Ноябрь 2012, 08:39:03 »
Думаю что врядли проблема в котировках.
Скорее формулы отрабатывают не идентично.
без кода и описания что вы хотите от него трудно что-то сказать

Оффлайн Craft

  • Участник клуба
  • *
  • Сообщений: 57
    • Просмотр профиля
EasyLanguage
« Ответ #32 : 10 Ноябрь 2012, 09:31:08 »
Да, описание же самого простого сентимента было не раз - учёт положительных и отрицательных изменений внутри старшего бара.
Ок, приведу формализацию в коде EL и МТ, давайте попробуем добиться идентичных результатов.

EL:
Цитировать
vars: barpl(0), barmin(0);

condition1 = Close Data2 > Close[1] Data2;
condition2 = Close Data2 < Close[1] Data2;
condition3 = Time[1] Data2 = Time Data1;

if condition3 then begin
   If Condition1 then begin
      barpl = Close Data2; barmin = 0;
   end else
   if Condition2 then begin
      barmin = Close Data2; barpl = 0;
   end else begin
      barmin = 0; barpl = 0;
   end;
end else begin
   if Condition1 then barpl = barpl + Close Data2;
   if Condition2 then barmin = barmin +Close Data2;
end;

If barpl<>0 and barmin<>0 then begin
plot1(barpl/barmin,"barpl");
plot2(barmin/barpl,"barmin");
plot3(0,"0");
end;

МТ:
Цитировать
//+------------------------------------------------------------------+
//|                                                           vl.mq4 |
//|                      Copyright © 2009, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2009, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red

//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexBuffer(1,ExtMapBuffer2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int    counted_bars=IndicatorCounted();
   double barpl, barminus;
   int i=Bars-counted_bars;
   {
         int shift = 0; //Ваш исходный бар
         datetime dt = iTime( Symbol(), NULL, shift); //Находим время исходного бара:
         int a = iBarShift( Symbol(), PERIOD_M1, dt, false);//Находим начальный бар на нужном ТФ:
         int kolvo = a-MathRound(Period()/PERIOD_M1);//Находим количество баров для проверки
         if (kolvo < 0 ) {kolvo=0;}//Проверка на валидность
         for (i=a;i>=kolvo;i--) //Ну и понеслась...
         {

            if (iClose(NULL, PERIOD_M1,i)> iClose(NULL, PERIOD_M1,i+1))
            {
                  barpl = barpl + iClose(NULL, PERIOD_M1, i);
            }
            if (iClose(NULL, PERIOD_M1,i+1)>iClose(NULL, PERIOD_M1,i))
            {
                 barminus = barminus + iClose(NULL, PERIOD_M1, i);
            }               
         
         }           
      ExtMapBuffer1 = (barpl/barminus);
      ExtMapBuffer2 = (barminus/barpl);
   } 
   return(0);
  }
//+------------------------------------------------------------------+

Ниже скрин сравнения результатов расчёта - разница на лицо.

Оффлайн ihaar

  • Участник клуба
  • *
  • Сообщений: 1 072
    • Просмотр профиля
EasyLanguage
« Ответ #33 : 10 Ноябрь 2012, 09:50:23 »
Я сейчас не у компа, но самый простой способ проверить в котировках ли дело, это выгрузить историю минуток из МТ в файл и построить индикатор по ним в ТС

Оффлайн ihaar

  • Участник клуба
  • *
  • Сообщений: 1 072
    • Просмотр профиля
EasyLanguage
« Ответ #34 : 07 Сентябрь 2013, 19:43:28 »
что-то не могу уловить принцип использования новых классов в ТS
нужно передать значение из одного индикатора в другой (например время и значение, так как это делается в пульсе)
может ктото уже разбирался и есть кусочек кода для подобной задачки?
был бы очень признателен

Оффлайн Gelium

  • Администратор
  • Сообщений: 6 726
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #35 : 08 Сентябрь 2013, 04:30:29 »
Да, примерчик в статье я куций привел. :)

Using elsystem;

Vars:
GlobalValue GlobalValue1(null),

GlobalValue1 = GlobalValue.Create();
GlobalValue1.Name = "MyValue1";
GlobalValue1.Channel = "MyValue1";
GlobalValue1.Load = true;
if p_Debug = 1 then begin
GlobalValue1.DoubleValue = 123.45;
print(ldt, " Set ", GlobalValue1.DoubleValue);
end else
print(ldt, " Get ", GlobalValue1.DoubleValue);

Оффлайн Gelium

  • Администратор
  • Сообщений: 6 726
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #36 : 08 Сентябрь 2013, 04:32:20 »
Учтите, что при включении мультиядерности, глобальные переменные могут не работать. Это исправлено в новых билдах, но они пока не работают с QR. Поэтому работу при мультиядерности надо проверять отдельно.

Оффлайн ihaar

  • Участник клуба
  • *
  • Сообщений: 1 072
    • Просмотр профиля
EasyLanguage
« Ответ #37 : 08 Сентябрь 2013, 05:46:17 »
ок. спасибо большое.
на всякий случай оставил в виртуалке одно ядро.
и кстати, я так понимаю, что пульс тоже по идее грузится на каждое ядро своя копия?

Оффлайн Gelium

  • Администратор
  • Сообщений: 6 726
    • Просмотр профиля
    • Gelium.net
EasyLanguage
« Ответ #38 : 08 Сентябрь 2013, 10:05:38 »
В виртуалке вы можете ставить сколько хотите ядер. Внутри TS не надо включать опцию размножения платформы на несколько ядер. TS, в отличии от MC, создает не потоки, а экземпляры платформы. Для каждого экземпляра отдельно грузится Puls. Он под это пока не заточен. Нет времени на такую заточку. Если нанимать программера, то все это конечно можно довести до хорошего уровня. Но пока я не ощущаю большой нужды тратить на это время.

Оффлайн ihaar

  • Участник клуба
  • *
  • Сообщений: 1 072
    • Просмотр профиля
EasyLanguage
« Ответ #39 : 18 Сентябрь 2013, 16:31:36 »
Павел, если это не копирайт, поделитесь плиз секретом, как вы в Gelium_Trend добились задания стиля и цвета прямых линий в свойствах индикатора, так как будто это не линии а plot
да так что оно ещё и вершины подсвечивает
 ;)