Help Adx From OMEGA in MetaTrader - страница 2

 
vuk:
Integer:
Где код?
А ЧТО У ВАС НЕТ OMEGI
{*******************************************************************
Description: Average Directional Index
Provided By: Omega Research, Inc. (c) Copyright 1999
********************************************************************}
 
Inputs: Length(NumericSimple);
Variables: Counter(0), CummDMI(0), Return(0);
 
Return = 0;
 
If CurrentBar >= 1 AND Length > 0 Then Begin
    If CurrentBar < Length Then begin
        CummDMI = 0;
        for Counter = 0 To CurrentBar - 1 Begin
            CummDMI = CummDMI + DMI(Length)[Counter];
        End;
        Return = CummDMI / CurrentBar;
    End
    Else 
        Return = (ADX[1] * (Length - 1) + DMI(Length)) / Length;
End;
 
ADX = Return;
ВКЛАДЫВАЮ ФАЙЛ

Представьте себе - нету у меня омеги, у меня MetaTrader, но это не мешает понимать мне ее код. А вы считаете, что я обязан ее иметь?

Код, который вы здесь выложили.... Это экспоненициальное сглаживание DMI, код для расчета которого отсутствует, если вы выложите код DMI, наверно будет отсутсвовать код PDI и MDI и т.д.

Если вы можете предоставить весь код, необходимый для повторения индикатора, пишите на for-good-letters@yandex.ru, там же обо всем остальном договоримся.

 
nickbilak:

метаквотес действительно сделали ошибку при реализации АДХ в своем терминале и они же должны ее исправить.

однажды мне даже пришлось специально делать (на заказ) АДХ для трейдстейшн, чтобы он совпадал с метатрейдеровским :)

Ну и сколько это стоило?Код то остался!
 

стоило 30 евро. но делал я код для трейдстейшн, чтобы индикатор был идентичным с МТшным

исправить МТшный код не составит особого труда, но, я думаю, это должны сделать программисты метаквотес бесплатно для всех

 
nickbilak:

стоило 30 евро. но делал я код для трейдстейшн, чтобы индикатор был идентичным с МТшным

исправить МТшный код не составит особого труда, но, я думаю, это должны сделать программисты метаквотес бесплатно для всех

Если ты понимаешь omega то наверное заметил что код я выложил на первой странице 30евро это кидок код элементарный я долго мучался понять язык mt чтобы его в омегу загнать и там протестить так как мт для меня это лес и учить его не хочу так как нормального постовщика котировок к ним не подключить проще подключить TradeStation 8.1 ---- owndata вот это серьёзный продукт и програмировать не сложно и отчёт отличный да ипо DDE ИЗ ЛЮБОЙ БАЗОВОЙ ПРОГЕ КОТИРОВКИ ЗАКИДЫВАЮТСЯ БЕЗ ПРОБЛЕМ .ЕСЛИ ИНТЕРЕСНО ПОПРОБУЙ СОВМЕСТИ ДВА СИГНАЛА ИЗ ОМЕГИ DMI BULLISH И DMI BEARISH ПРОГОНИ НА 15 МИНУТКАХ EESR PAO ПОЛУЧИШЬ НЕПЛОХОЙ РЕЗУЛЬТАТ ТОРГУЮ С МАЯ ХОТЕЛ ПРОСТО АВТОМАТ СДЕЛАТЬ ЧЁРТОВ МТ НЕ МОГУ ПЕРЕПИСАТЬ
 
nickbilak:

стоило 30 евро. но делал я код для трейдстейшн, чтобы индикатор был идентичным с МТшным

исправить МТшный код не составит особого труда, но, я думаю, это должны сделать программисты метаквотес бесплатно для всех


Ситуация очень интересная, наверняка есть люди которые приспособились работать с тем вариантом который в МТ сейчас. Если взять и переделать будет много неприятностей. Кажется ДиНаполи в своей книге очень выразительно писал про это.

 
vuk:
nickbilak:

стоило 30 евро. но делал я код для трейдстейшн, чтобы индикатор был идентичным с МТшным

исправить МТшный код не составит особого труда, но, я думаю, это должны сделать программисты метаквотес бесплатно для всех

Если ты понимаешь omega то наверное заметил что код я выложил на первой странице 30евро это кидок код элементарный я долго мучался понять язык mt чтобы его в омегу загнать и там протестить так как мт для меня это лес и учить его не хочу так как нормального постовщика котировок к ним не подключить проще подключить TradeStation 8.1 ---- owndata вот это серьёзный продукт и програмировать не сложно и отчёт отличный да ипо DDE ИЗ ЛЮБОЙ БАЗОВОЙ ПРОГЕ КОТИРОВКИ ЗАКИДЫВАЮТСЯ БЕЗ ПРОБЛЕМ .ЕСЛИ ИНТЕРЕСНО ПОПРОБУЙ СОВМЕСТИ ДВА СИГНАЛА ИЗ ОМЕГИ DMI BULLISH И DMI BEARISH ПРОГОНИ НА 15 МИНУТКАХ EESR PAO ПОЛУЧИШЬ НЕПЛОХОЙ РЕЗУЛЬТАТ ТОРГУЮ С МАЯ ХОТЕЛ ПРОСТО АВТОМАТ СДЕЛАТЬ ЧЁРТОВ МТ НЕ МОГУ ПЕРЕПИСАТЬ


ну 30 евро для американцев это далеко не кидок, практически даром, учитывая мое время, потраченное на поиск источника несоответствия.

а что разве в трейдстейшн нельзя сделать автомат для торговли твоей стратегии?

Ситуация очень интересная, наверняка есть люди которые приспособились работать с тем вариантом который в МТ сейчас. Если взять и переделать будет много неприятностей. Кажется ДиНаполи в своей книге очень выразительно писал про это.
да мне-то все равно, но я встречал много жалоб на отличие МТшной версии от всех остальных программ и всего одну просьбу сделать "как в МТ"
я думаю правильней будет все же привести в соответствие с оригиналом, а старую версию оставить в виде пользовательского индикатора
 
vuk:
Не ужели не кого никогда не интересовал вопрос что adx в mt совсем не такой как в омеге .Уважаемые програмисты или пользователи mt если у кого есть код индикатора adx из из omegi в mt коде киньте ссылку весь инет переыл не нашёл.ЕСЛИ КОМУ НУЖЕН КОД ADX MT В ОМЕГУ МОГУ СКИНУТЬ,ДОЛГО МУЧАЛСЯ НО НАПИСАЛ САМ.Я НЕ ПРОГРАМИСТ ТОЛЬКО УЧУСЬ.

А в чем собственно ошибка, Павел? Я вот как раз решил попробовать системку на ADX придумать, так, почитав ветку, немного, так сказать, напрягся. Он реально халтурит при подаче сигналов?

 
Rosh:
Возможно, алгоритмы расчета не совпадают. Я уже нашел первоисточник-книгу, но прочитать это место пока не успел. Посмотрите ветку 'ADX of MQL4 don't give same result as ADX of Amibroker'

Здравствуйте! Хотелось бы осведомиться по поводу ADX. Есть какие-то сдвиги в сторону решения вопроса?

 
Посмотрите здесь - WildersDMI_v1
 
vuk:
Не ужели не кого никогда не интересовал вопрос что adx в mt совсем не такой как в омеге .Уважаемые програмисты или пользователи mt если у кого есть код индикатора adx из из omegi в mt коде киньте ссылку весь инет переыл не нашёл.ЕСЛИ КОМУ НУЖЕН КОД ADX MT В ОМЕГУ МОГУ СКИНУТЬ,ДОЛГО МУЧАЛСЯ НО НАПИСАЛ САМ.Я НЕ ПРОГРАМИСТ ТОЛЬКО УЧУСЬ.

Год назад пересел с Омеги на MQ4. Совсем не жалею, но мировоззрение придется менять. Сам DMI не пользуюсь, но год назад подшаманил первый попавшийся.

Посмотрите, должен быть похож:

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 LightSeaGreen
#property indicator_color2 Red
#property indicator_color3 Blue
//---- input parameters
extern int ADXPeriod=14;
//---- buffers
double ADXBuffer[];
double PlusDiBuffer[];
double MinusDiBuffer[];
double PlusSdiBuffer[];
double MinusSdiBuffer[];
double TempBuffer[];
double Spread,SP;
//////////////////////////////////////////////
int init()
  {
   IndicatorBuffers(6);
//---- 
   SetIndexBuffer(0,ADXBuffer);
   SetIndexBuffer(1,PlusDiBuffer);
   SetIndexBuffer(2,MinusDiBuffer);
   SetIndexBuffer(3,PlusSdiBuffer);
   SetIndexBuffer(4,MinusSdiBuffer);
   SetIndexBuffer(5,TempBuffer);
//---- 
   IndicatorShortName("ADX("+ADXPeriod+")");
   SetIndexLabel(0,"ADX");
   SetIndexLabel(1,"+DI");
   SetIndexLabel(2,"-DI");
//----
   SetIndexDrawBegin(0,ADXPeriod);
   SetIndexDrawBegin(1,ADXPeriod);
   SetIndexDrawBegin(2,ADXPeriod);
//----
  Spread=MarketInfo(Symbol(),MODE_SPREAD)*MarketInfo(Symbol(),MODE_POINT);
  SP=Spread/2.0;
//----
   return(0);
  }
////////////////////////////////////////////////////
int start()
  {
   double pdm,mdm,tr;
   double price_high,price_low;
   int    starti,i,counted_bars=IndicatorCounted();
//----
   i=Bars-2;
   PlusSdiBuffer[i+1]=0.0;
   MinusSdiBuffer[i+1]=0.0;
   if(counted_bars>=i) i=Bars-counted_bars-1;
   starti=i;
//----
   while(i>=0)
     {
      price_low=Low[i];
      price_high=High[i]+Spread;
      //////////////////////////
      pdm=price_high-High[i+1]-Spread;
      mdm=Low[i+1]-price_low;
      if(pdm<0.0) pdm=0.0;  // +DM
      if(mdm<0.0) mdm=0.0;  // -DM
      if(pdm==mdm) { pdm=0.0; mdm=0.0; }
      else if(pdm<mdm) pdm=0.0;
           else if(mdm<pdm) mdm=0.0;
      ///////////////////////////////
      double num1=MathAbs(price_high-price_low);
      double num2=MathAbs(price_high-Close[i+1]-SP);
      double num3=MathAbs(price_low-Close[i+1]-SP);
      tr=MathMax(num1,num2);
      tr=MathMax(tr,num3);
      ///////////////////////////////////////////////
      if(tr==0.0) 
	{ PlusSdiBuffer[i]=0.0; MinusSdiBuffer[i]=0.0; }
      else      
	{ PlusSdiBuffer[i]=100.0*pdm/tr; MinusSdiBuffer[i]=100.0*mdm/tr; }
      ////////////////////////////////////////////////////////////////////
      i--;
     }
//---- 
   if(counted_bars>0) counted_bars--;
   int limit=Bars-counted_bars;
//---- +DI
   for(i=0; i<=limit; i++)
      PlusDiBuffer[i]=iMAOnArray(PlusSdiBuffer,Bars,ADXPeriod,0,MODE_EMA,i);
//---- -DI
   for(i=0; i<=limit; i++)
      MinusDiBuffer[i]=iMAOnArray(MinusSdiBuffer,Bars,ADXPeriod,0,MODE_EMA,i);
//---- DX
   i=Bars-2;
   TempBuffer[i+1]=0.0;
   i=starti;
   while(i>=0)
     {
      double div=MathAbs(PlusDiBuffer[i]+MinusDiBuffer[i]);
      if(div==0.0) TempBuffer[i]=0.0;
      else TempBuffer[i]=100*(MathAbs(PlusDiBuffer[i]-MinusDiBuffer[i])/div);
      i--;
     }
//---- ADX 
   for(i=0; i<limit; i++)
      ADXBuffer[i]=iMAOnArray(TempBuffer,Bars,ADXPeriod,0,MODE_EMA,i);
//----
   return(0);
  }
//+------------------------------------------------------------------+