Ручные торговые стратегии и системы Обсуждаем ручные торговые стратегии и системы для торговли на форекс и биржах: примеры входов, доработка, обновленные версии, вопросы и ответы.

Ответ
 
Опции темы
Старый 19.09.2016, 13:09   #681 (permalink)
Местный знаток
 
Аватар для transcendreamer
 
Регистрация: 19.02.2013
Адрес: путешествую по миру
Сообщений: 1,157
Репутация: 604
transcendreamer - transcendreamer - transcendreamer - transcendreamer - transcendreamer - transcendreamer -
Сказал(а) спасибо: 165
Поблагодарили 604 раз(а) в 282 сообщениях
Поинты: 1173
Сообщение от ara66676 Посмотреть сообщение
double*MNK_INDyK=INDyK1-(SUM_EQWY*(ST2-xx)*TREND);
это дельта портфеля и тренда
которую ты суммируешь в диапазоне баров
в итоге ты делишь на диапазон и получаешь средний квадрат ошибки
в принципе замечаний нет
хотя корень для порядка надо бы взять чтобы было RMS error
(если данные были подготовлены правильно то все окей)
но это можно было бы получить стандартным образом из алглиба
однако не видно что ты делаешь дальше
среднеквадратичная ошибка не всегда лучший способ оценки модели
кроме того я подозреваю что тренд ты предварительно не оптимизируешь
поэтому качество модели будет посредственное

Сообщение от ara66676 Посмотреть сообщение
if(INDyK1>SUM_EQWY*(ST2-xx)*TREND)
здесь очевидно оценивается положение портфеля относительно трендовой
это очень хорошее дело например для поиска цены входа

Сообщение от ara66676 Посмотреть сообщение
TREND_UP_1++;
тут ты просто подсчитываешь число баров выше трендовой
аналогичный фрагмент ниже трендовой для падающего портфеля
и число баров недостаточно трендовых
замечаний особо нет (если конечно ты понимаешь что делаешь)
для экономности я бы рекомендовал создавать промежуточные переменные
например для SUM_EQWY*(ST2-xx)*TREND
так и работать будет быстрее и читать удобнее

Сообщение от ara66676 Посмотреть сообщение
TREND_UP_1/NO_TREND_1)>=TREND_NAL
оценка трендовости через долю числа точек это конечно ваххабизм
но формально ошибки здесь нет
почему ваххабизм:
трендовый портфель по определению несёт в себе трендовый компонент
поэтому сравнивать его с трендовой линией имеет смысл только для точки
для всего отрезка это будет довольно случайный результат
так как портфель как правило не может расти экспоненциально
он лишь обвивается вокруг трендовой
поэтому будет нормальным когда половина баров ниже трендовой
и это никак не свидетельствует что тренд плохой
кроме того в твоей реализации нужно было сделать масштабирование
так как иногда даже флэтовый портфель может выше тренда
например его в начале интервала выкинуло вверх а потом он начал флэтить
если кфц тренда при этом невысокий то тренд недогонит
возможно ты делаешь масштабирование а в этом фрагменте просто не видно
но если не делаешь - тогда ты вдвойне ваххабит
результаты будут случайными
да и вообще делать подгонку тренда под неоптимизированный портфель
ну это все равно что устраивать гонки на грузовиках с прицепом
я бы рекомендовал пересмотреть подход
и начать лучше с самого начала
с постановки задачи
поиск трендовых портфелей?
окей тогда лучше всего оптимизировать пучок под тренд
и дальше уже фильтровать результаты в пучке
можно пойти иначе
можно оценить трендовость компонентов
отфильтровать их
и уже после этого собирать портфель

Сообщение от ara66676 Посмотреть сообщение
а найдутся покупатели на мой комп со всем его содержимым???
ты слишком уникальный разработчик чтобы ктото смог это продолжить
transcendreamer вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
ara66676 (19.09.2016)
Старый 19.09.2016, 13:26   #682 (permalink)
Активный участник
 
Аватар для ara66676
 
Регистрация: 21.10.2012
Адрес: Ростов на Дону
Сообщений: 400
Репутация: 46
ara66676
Сказал(а) спасибо: 19
Поблагодарили 30 раз(а) в 24 сообщениях
Поинты: 496
Отправить сообщение для ara66676 с помощью Skype™
Сообщение от transcendreamer Посмотреть сообщение
это дельта портфеля и тренда
которую ты суммируешь в диапазоне баров
в итоге ты делишь на диапазон и получаешь средний квадрат ошибки
в принципе замечаний нет
хотя корень для порядка надо бы взять чтобы было RMS error
(если данные были подготовлены правильно то все окей)
но это можно было бы получить стандартным образом из алглиба
однако не видно что ты делаешь дальше
среднеквадратичная ошибка не всегда лучший способ оценки модели
кроме того я подозреваю что тренд ты предварительно не оптимизируешь
поэтому качество модели будет посредственное



здесь очевидно оценивается положение портфеля относительно трендовой
это очень хорошее дело например для поиска цены входа


тут ты просто подсчитываешь число баров выше трендовой
аналогичный фрагмент ниже трендовой для падающего портфеля
и число баров недостаточно трендовых
замечаний особо нет (если конечно ты понимаешь что делаешь)
для экономности я бы рекомендовал создавать промежуточные переменные
например для SUM_EQWY*(ST2-xx)*TREND
так и работать будет быстрее и читать удобнее


оценка трендовости через долю числа точек это конечно ваххабизм
но формально ошибки здесь нет
почему ваххабизм:
трендовый портфель по определению несёт в себе трендовый компонент
поэтому сравнивать его с трендовой линией имеет смысл только для точки
для всего отрезка это будет довольно случайный результат
так как портфель как правило не может расти экспоненциально
он лишь обвивается вокруг трендовой
поэтому будет нормальным когда половина баров ниже трендовой
и это никак не свидетельствует что тренд плохой
кроме того в твоей реализации нужно было сделать масштабирование
так как иногда даже флэтовый портфель может выше тренда
например его в начале интервала выкинуло вверх а потом он начал флэтить
если кфц тренда при этом невысокий то тренд недогонит
возможно ты делаешь масштабирование а в этом фрагменте просто не видно
но если не делаешь - тогда ты вдвойне ваххабит
результаты будут случайными
да и вообще делать подгонку тренда под неоптимизированный портфель
ну это все равно что устраивать гонки на грузовиках с прицепом
я бы рекомендовал пересмотреть подход
и начать лучше с самого начала
с постановки задачи
поиск трендовых портфелей?
окей тогда лучше всего оптимизировать пучок под тренд
и дальше уже фильтровать результаты в пучке
можно пойти иначе
можно оценить трендовость компонентов
отфильтровать их
и уже после этого собирать портфель


ты слишком уникальный разработчик чтобы ктото смог это продолжить
это была только часть которую я думаю как ускорить, как и раньше я говорил что не хочу собирать портфель из слонов и попугаев, или это слоны разной масти в одном портфеле, или это стаи попугаев разных пород в одном портфеле....
я прикреплю код оценки ситуации , понимаю что сложно читать чужой код, но если посмотришь может и будет дельным чтото поменять...
PHP код:
//------------------------------------------------------------------// 
 
if(iTime(NULL,TF,0)>prev_time&&Prognoz_Valut==false&&PositionsTotal()==0)
   {
     
OSHIBKA_ETALON_1=1000000000;OSHIBKA_ETALON_2=1000000000;RAZNOST_ETALON=0;RAZNOST_ETALON2=100000;
     
Symbol1="";Symbol2="";Symbol3="";Symbol4="";sym1="";sym2="";sym3="";sym4="";
     
LOT1=0;LOT2=0;LOT3=0;LOT4=0;LOT111=0;LOT222=0;LOT333=0;LOT444=0;
     
ArrayInitialize(MaXIMUM1,-10000); 
     
ArrayInitialize(MiNIMUM1,10000);
     
ArrayInitialize(MaXIMUM2,-10000); 
     
ArrayInitialize(MiNIMUM2,10000);
     
w=0;
     
//Alert("++ РАСЧИТАЕМ НОВЫЙ СИНТЕТИК ++");
     
for( w=3875w>0w--)
        {
         
         
Symbol1=StringSubstr(SYMBOL_MASS[w],0,6);
         
Symbol2=StringSubstr(SYMBOL_MASS[w],7,6);
         
Symbol3=StringSubstr(SYMBOL_MASS[w],14,6);
         
Symbol4=StringSubstr(SYMBOL_MASS[w],21,6);
         
//Print(Symbol1+"  "+Symbol2+"  "+Symbol3+"  "+Symbol4);
//------------------------------------------------------------------//
         
if(StringFind(Symbol1,"JPY")<0punkt1=1; else punkt1=100;
         if(
StringFind(Symbol2,"JPY")<0punkt2=1; else punkt2=100;
         if(
StringFind(Symbol3,"JPY")<0punkt3=1; else punkt3=100;
         if(
StringFind(Symbol4,"JPY")<0punkt4=1; else punkt4=100;
         
LOT1=NormalizeDouble(lot*(1*punkt1/MarketInfo(Symbol1,MODE_BID)),2);   
         
LOT2=NormalizeDouble(lot*(1*punkt2/MarketInfo(Symbol2,MODE_BID)),2);   
         
LOT3=NormalizeDouble(lot*(1*punkt3/MarketInfo(Symbol3,MODE_BID)),2); 
         
LOT4=NormalizeDouble(lot*(1*punkt4/MarketInfo(Symbol4,MODE_BID)),2);
         
double pun11=0,pun12=0,pun13=0,pun14=0;
         if(
StringFind(Symbol1,"JPY",0)<0pun11=100000; else pun11=1000;
         if(
StringFind(Symbol1,"JPY",0)<0pun12=100000; else pun12=1000;
         if(
StringFind(Symbol1,"JPY",0)<0pun13=100000; else pun13=1000;
         if(
StringFind(Symbol1,"JPY",0)<0pun14=100000; else pun14=1000;
         
double Eqwyty1=10*LOT1*MarketInfo(Symbol1,MODE_TICKVALUE);
         
double Eqwyty2=10*LOT2*MarketInfo(Symbol2,MODE_TICKVALUE);
         
double Eqwyty3=10*LOT3*MarketInfo(Symbol3,MODE_TICKVALUE);
         
double Eqwyty4=10*LOT4*MarketInfo(Symbol4,MODE_TICKVALUE); 
         
double SUM_EQWY=Eqwyty1+Eqwyty2+Eqwyty3+Eqwyty4;
         
//Alert("+++ ПУНКТ ПРИБЫЛИ = "+(string)SUM_EQWY);
//-------------------------------------------------------------------------------------------------//
         
         
for(int variant=0;variant<8;variant++)
            {
             
             if(
variant==0){LOT111=LOT1;LOT222=LOT2;LOT333=LOT3;LOT444=LOT4;OP1="BUY";OP2="BUY";OP3="BUY";OP4="BUY";}
             if(
variant==1){LOT111=LOT1;LOT222=LOT2;LOT333=LOT3;LOT444=(-1)*LOT4;OP1="BUY";OP2="BUY";OP3="BUY";OP4="SELL";}
             if(
variant==2){LOT111=LOT1;LOT222=LOT2;LOT333=(-1)*LOT3;LOT444=LOT4;OP1="BUY";OP2="BUY";OP3="SELL";OP4="BUY";}
             if(
variant==3){LOT111=LOT1;LOT222=LOT2;LOT333=(-1)*LOT3;LOT444=(-1)*LOT4;OP1="BUY";OP2="BUY";OP3="SELL";OP4="SELL";}
             if(
variant==4){LOT111=LOT1;LOT222=(-1)*LOT2;LOT333=LOT3;LOT444=LOT4;OP1="BUY";OP2="SELL";OP3="BUY";OP4="BUY";}
             if(
variant==5){LOT111=LOT1;LOT222=(-1)*LOT2;LOT333=LOT3;LOT444=(-1)*LOT4;OP1="BUY";OP2="SELL";OP3="BUY";OP4="SELL";}
             if(
variant==6){LOT111=LOT1;LOT222=(-1)*LOT2;LOT333=(-1)*LOT3;LOT444=LOT4;OP1="BUY";OP2="SELL";OP3="SELL";OP4="BUY";}
             if(
variant==7){LOT111=LOT1;LOT222=(-1)*LOT2;LOT333=(-1)*LOT3;LOT444=(-1)*LOT4;OP1="BUY";OP2="SELL";OP3="SELL";OP4="SELL";}
             
             
SUMMA_MNK_1=0;SUMMA_MNK_2=0;
             
TREND_DOWN=false;KORR_UP=false;TREND_UP=false;KORR_DOWN=false;FLAAT=false;
             
RAZNOST1=0;RAZNOST2=0;
             
TREND_UP_1=0;TREND_DOWN_1=0;NO_TREND_1=1;
             
//----------------ПЕРВЫЙ УЧАСТОК-----------
             
double INDyK5=Equity_4I_Pairs(Symbol1,Symbol2,Symbol3,Symbol4,ST2,TF,ST1,LOT111,LOT222,LOT333,LOT444);
             
double INDyK6=Equity_4I_Pairs(Symbol1,Symbol2,Symbol3,Symbol4,ST2,TF,ST,LOT111,LOT222,LOT333,LOT444);
             if((
INDyK5>(SUM_EQWY*(ST2-ST1)*TREND) && (INDyK5-INDyK6)<=(INDyK5/Trend_Flat)) ||
                (
INDyK5<(SUM_EQWY*(ST2-ST1)*TREND*(-1)) && (INDyK5-INDyK6)<=(INDyK5/Trend_Flat)))
                {
             
//------------- IF RAZNOST1 == 0 ----------
             
if(RAZNOST1==0)
               {
                
//Alert("=== ОПРЕДЕЛЯЕМ ПЕРВЫЙ УЧАСТОК ===");
                
for(int xx=ST2;xx>=ST1;xx--)
                    {
                     
double INDyK1=Equity_4I_Pairs(Symbol1,Symbol2,Symbol3,Symbol4,ST2,TF,(xx),LOT111,LOT222,LOT333,LOT444);
                     
//Alert("=== ИНДЮК № "+(string)(ST2-xx)+" === "+(string)INDyK1);
                     
if(INDyK1>MaXIMUM1[variant][w]) { MaXIMUM1[variant][w]=INDyK1; }
                     if(
INDyK1<MiNIMUM1[variant][w]) { MiNIMUM1[variant][w]=INDyK1; }
                     if(
INDyK1>SUM_EQWY*(ST2-xx)*TREND)
                       {
                        
TREND_UP_1++;
                       }
                     if(
INDyK1<(-1)*SUM_EQWY*(ST2-xx)*TREND)
                       {
                        
TREND_DOWN_1++;
                       }
                     if(
INDyK1<SUM_EQWY*(ST2-xx)*TREND && INDyK1>(-1)*SUM_EQWY*(ST2-xx)*TREND)
                       {
                        
NO_TREND_1++;
                       }    
                     if(
xx==ST1)
                       {
                        
RAZNOST1=MaXIMUM1[variant][w]-MiNIMUM1[variant][w];
                        if(
TREND_UP_1>TREND_DOWN_1 && (TREND_UP_1/NO_TREND_1)>=TREND_NAL){TREND_UP=true;}
                        if(
TREND_UP_1<TREND_DOWN_1 && (TREND_DOWN_1/NO_TREND_1)>=TREND_NAL){TREND_DOWN=true;}
                       }
                    } 
                }
             
//------------- IF RAZNOST2 == 0 ----------
             
if(RAZNOST2==0)
               {
                
//Alert("=== ОПРЕДЕЛЯЕМ ВТОРОЙ УЧАСТОК ===");
                
for(int xx=ST1;xx>=ST;xx--)
                    {
                     
double INDyK2=Equity_4I_Pairs(Symbol1,Symbol2,Symbol3,Symbol4,ST1,TF,(xx),LOT111,LOT222,LOT333,LOT444);
                     
double INDyK22=Equity_4I_Pairs(Symbol1,Symbol2,Symbol3,Symbol4,ST2,TF,(xx),LOT111,LOT222,LOT333,LOT444);
                     if(
INDyK22>MaXIMUM2[variant][w]) { MaXIMUM2[variant][w]=INDyK22; }
                     if(
INDyK22<MiNIMUM2[variant][w]) { MiNIMUM2[variant][w]=INDyK22; }
                     if(
xx==ST)
                       {
                        
RAZNOST2=MaXIMUM2[variant][w]-MiNIMUM2[variant][w];
                       }
                    } 
                } 
                 
             
//------------- ВЫЧИСЛЯЕМ ОШИБКУ ПЕРВОГО УЧАСТКА -------------------
             
             
for(int xx=ST2;xx>=ST1;xx--)
                { 
                 
double INDyK1=Equity_4I_Pairs(Symbol1,Symbol2,Symbol3,Symbol4,ST2,TF,(xx),LOT111,LOT222,LOT333,LOT444);
                 
double MNK_INDyK=INDyK1-(SUM_EQWY*(ST2-xx)*TREND);
                 
SUMMA_MNK_1=SUMMA_MNK_1+(MNK_INDyK*MNK_INDyK);
                 if(
xx==ST1){SUMMA_MNK_1=SUMMA_MNK_1/(ST2-ST1);}
                }
                  
             
//------------- ВЫЧИСЛЯЕМ ОШИБКУ ВТОРОГО УЧАСТКА -------------------
             
             
for(int xxx=ST1;xxx>=ST;xxx--)
                { 
                 
double INDyK2=Equity_4I_Pairs(Symbol1,Symbol2,Symbol3,Symbol4,ST1,TF,(xxx),LOT111,LOT222,LOT333,LOT444);
                 
double MNK_INDyK2=INDyK2;
                 
SUMMA_MNK_2=SUMMA_MNK_2+(MNK_INDyK2*MNK_INDyK2);
                 if(
xxx==ST){SUMMA_MNK_2=SUMMA_MNK_2/(ST1-ST);}
                }
                
             
             if(
TREND_UP==true && SUMMA_MNK_1<OSHIBKA_ETALON_1 && SUMMA_MNK_2<OSHIBKA_ETALON_2 && RAZNOST2<RAZNOST_ETALON2
                
&& MathAbs(RAZNOST2) < MathAbs(RAZNOST1/Trend_Flat)&& RAZNOST1 RAZNOST_ETALON)
               { 
                
PROFIT=RAZNOST2*TAKE_PROFIT;
                
STOP_LOSS=RAZNOST2;
                
RAZNOST_ETALON=RAZNOST1;
                
RAZNOST_ETALON2=RAZNOST2;   
                
MINIMUM_UP=MiNIMUM2[variant][w];
                
MAXIMUM_UP=MaXIMUM2[variant][w];
                
OSHIBKA_ETALON_1=SUMMA_MNK_1;
                
OSHIBKA_ETALON_2=SUMMA_MNK_2;
                
sym1=Symbol1;sym2=Symbol2;sym3=Symbol3;sym4=Symbol4;
                
Operation1=OP1;Operation2=OP2;Operation3=OP3;Operation4=OP4;
                
lot11=LOT111;lot22=LOT222;lot33=LOT333;lot44=LOT444;
                
Alert("МАКСИМУМ 1= "+(string)MaXIMUM1[variant][w]+" МИНИМУМ 1= "+(string)MiNIMUM1[variant][w]);
                
Alert("МАКСИМУМ 2 = "+(string)MaXIMUM2[variant][w]+" МИНИМУМ 2 = "+(string)MiNIMUM2[variant][w]);
                
Alert(" OSHIBKA = "+(string)OSHIBKA_ETALON_1);
                
Alert(" OSHIBKA_2 = "+(string)OSHIBKA_ETALON_2);
                
Alert(" RAZNOST = "+(string)RAZNOST1);
                
Alert(" RAZNOST_2 = "+(string)RAZNOST2);
                
Alert("+++ TREND UP +++");
                
Alert(sym1+"= "+Operation1+" "+sym2+"= "+Operation2+" "+sym3+"= "+Operation3+" "+sym4+"= "+Operation4);
                
Prognoz_Valut=true;
                
Lot_Raschet=true;
                
SIGNAL_UP=true;
                
SIGNAL_DOWN=false;
                
MINIMUM_DOWN=0;MAXIMUM_DOWN=0;
                
TREND_DOWN=false;KORR_UP=false;TREND_UP=false;KORR_DOWN=false;
               }
                
             if(
TREND_DOWN==true && SUMMA_MNK_1<OSHIBKA_ETALON_1 && SUMMA_MNK_2<OSHIBKA_ETALON_2 && RAZNOST2<RAZNOST_ETALON2
                
&& MathAbs(RAZNOST2) < MathAbs(RAZNOST1/Trend_Flat) && RAZNOST1 RAZNOST_ETALON)
               {
                
PROFIT=RAZNOST2*TAKE_PROFIT;
                
STOP_LOSS=RAZNOST2;
                
RAZNOST_ETALON=RAZNOST1;
                
RAZNOST_ETALON2=RAZNOST2;
                
MINIMUM_DOWN=MiNIMUM2[variant][w];
                
MAXIMUM_DOWN=MaXIMUM2[variant][w];
                
OSHIBKA_ETALON_1=SUMMA_MNK_1;
                
OSHIBKA_ETALON_2=SUMMA_MNK_2;
                
sym1=Symbol1;sym2=Symbol2;sym3=Symbol3;sym4=Symbol4;
                
Operation1=OP1;Operation2=OP2;Operation3=OP3;Operation4=OP4;
                
lot11=LOT111;lot22=LOT222;lot33=LOT333;lot44=LOT444;
                
Alert("МАКСИМУМ 1= "+(string)MaXIMUM1[variant][w]+" МИНИМУМ 1= "+(string)MiNIMUM1[variant][w]);
                
Alert("МАКСИМУМ 2 = "+(string)MaXIMUM2[variant][w]+" МИНИМУМ 2 = "+(string)MiNIMUM2[variant][w]);
                
Alert(" OSHIBKA = "+(string)OSHIBKA_ETALON_1);
                
Alert(" OSHIBKA_2 = "+(string)OSHIBKA_ETALON_2);
                
Alert(" RAZNOST = "+(string)RAZNOST1);
                
Alert(" RAZNOST_2 = "+(string)RAZNOST2);
                
Alert("+++ TREND DOWN +++" );
                
Alert(sym1+"= "+Operation1+" "+sym2+"= "+Operation2+" "+sym3+"= "+Operation3+" "+sym4+"= "+Operation4);
                
Prognoz_Valut=true;
                
Lot_Raschet=true;
                
SIGNAL_DOWN=true;
                
SIGNAL_UP=false;
                
MINIMUM_UP=0;MAXIMUM_UP=0;
                
TREND_DOWN=false;KORR_UP=false;TREND_UP=false;KORR_DOWN=false;
               }
              } 
            }      
          } 
      
prev_time=iTime(NULL,TF,0);
          
    } 
ara66676 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 19.09.2016, 13:35   #683 (permalink)
Активный участник
 
Аватар для ara66676
 
Регистрация: 21.10.2012
Адрес: Ростов на Дону
Сообщений: 400
Репутация: 46
ara66676
Сказал(а) спасибо: 19
Поблагодарили 30 раз(а) в 24 сообщениях
Поинты: 496
Отправить сообщение для ara66676 с помощью Skype™
как добавочный момент для понимания что и как я оцениваю под трендом....
предистория:
1 - хороший тренд это 100(старых) пунктов за два три часа.
2 - я нахожу стоимость пункта для портфеля.
3 - нахожу портфель с хорошим трендом на определённом участке( во входных параметрах).
4 - проверяю был ли флет этого портфеля на следующем участке (задаётся также во входных параметрах)
ну а дальше уже просто проверка на пробой....
всё вроде работает, блин только долго очень....
ara66676 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 19.09.2016, 14:04   #684 (permalink)
Активный участник
 
Аватар для ivanivan
 
Регистрация: 27.11.2013
Сообщений: 455
Репутация: 141
ivanivan ivanivan
Сказал(а) спасибо: 62
Поблагодарили 140 раз(а) в 63 сообщениях
Поинты: 491
Сообщение от ara66676 Посмотреть сообщение
как добавочный момент для понимания что и как я оцениваю под трендом....
предистория:
1 - хороший тренд это 100(старых) пунктов за два три часа.
2 - я нахожу стоимость пункта для портфеля.
3 - нахожу портфель с хорошим трендом на определённом участке( во входных параметрах).
4 - проверяю был ли флет этого портфеля на следующем участке (задаётся также во входных параметрах)
ну а дальше уже просто проверка на пробой....
всё вроде работает, блин только долго очень....
вместо очень многа букаф пару скринов полученных кривулек приложи)
ivanivan на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 19.09.2016, 14:08   #685 (permalink)
Активный участник
 
Аватар для ara66676
 
Регистрация: 21.10.2012
Адрес: Ростов на Дону
Сообщений: 400
Репутация: 46
ara66676
Сказал(а) спасибо: 19
Поблагодарили 30 раз(а) в 24 сообщениях
Поинты: 496
Отправить сообщение для ara66676 с помощью Skype™
Сообщение от ivanivan Посмотреть сообщение
вместо очень многа букаф пару скринов полученных кривулек приложи)
тест закончится приложу, говорю ведь долго блин.... с февраля месяца по сегодняшний день тест длится часа 4, а про то чтоб оптимизировать вообще молчу.... пока вручную параметры пробую подобрать...
ara66676 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 19.09.2016, 14:12   #686 (permalink)
Активный участник
 
Аватар для ivanivan
 
Регистрация: 27.11.2013
Сообщений: 455
Репутация: 141
ivanivan ivanivan
Сказал(а) спасибо: 62
Поблагодарили 140 раз(а) в 63 сообщениях
Поинты: 491
Сообщение от ara66676 Посмотреть сообщение
тест закончится приложу, говорю ведь долго блин.... с февраля месяца по сегодняшний день тест длится часа 4, а про то чтоб оптимизировать вообще молчу.... пока вручную параметры пробую подобрать...
поясни-тест чего? синтез кривульки или советника по ней?
ivanivan на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 19.09.2016, 14:14   #687 (permalink)
Активный участник
 
Аватар для ara66676
 
Регистрация: 21.10.2012
Адрес: Ростов на Дону
Сообщений: 400
Репутация: 46
ara66676
Сказал(а) спасибо: 19
Поблагодарили 30 раз(а) в 24 сообщениях
Поинты: 496
Отправить сообщение для ara66676 с помощью Skype™
Сообщение от ivanivan Посмотреть сообщение
поясни-тест чего? синтез кривульки или советника по ней?
советник по кривульке )
синтеза можно много понаделать, а вот работает или нет этот синтез советник и покажет, в моём примере получается 3875*8=31000 кривулек из 4 валютных пар, каждый час проверяются на соответствие модели, если есть такая идёт в торговлю ...

Последний раз редактировалось ara66676; 19.09.2016 в 14:16.
ara66676 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 19.09.2016, 14:15   #688 (permalink)
Активный участник
 
Аватар для ivanivan
 
Регистрация: 27.11.2013
Сообщений: 455
Репутация: 141
ivanivan ivanivan
Сказал(а) спасибо: 62
Поблагодарили 140 раз(а) в 63 сообщениях
Поинты: 491
Сообщение от ara66676 Посмотреть сообщение
советник по кривульке )
ну так я не резалты теста прошу показать,а кривульку-синтетик, который ты получил
ivanivan на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 19.09.2016, 14:18   #689 (permalink)
Активный участник
 
Аватар для ara66676
 
Регистрация: 21.10.2012
Адрес: Ростов на Дону
Сообщений: 400
Репутация: 46
ara66676
Сказал(а) спасибо: 19
Поблагодарили 30 раз(а) в 24 сообщениях
Поинты: 496
Отправить сообщение для ara66676 с помощью Skype™
Сообщение от ivanivan Посмотреть сообщение
ну так я не резалты теста прошу показать,а кривульку-синтетик, который ты получил
приношу свои извинения, но индюков на мт5 пока не пишу, мне проще этот алгоритм сразу в сов затолкать чем 31000 кривулек рассматривать...
ara66676 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 19.09.2016, 14:35   #690 (permalink)
Активный участник
 
Аватар для ivanivan
 
Регистрация: 27.11.2013
Сообщений: 455
Репутация: 141
ivanivan ivanivan
Сказал(а) спасибо: 62
Поблагодарили 140 раз(а) в 63 сообщениях
Поинты: 491
Сообщение от ara66676 Посмотреть сообщение
приношу свои извинения, но индюков на мт5 пока не пишу, мне проще этот алгоритм сразу в сов затолкать чем 31000 кривулек рассматривать...
если ты на ходу пересчитываешь свой динамический синтетик,то это хардкор)) тогда транс тебе правильно давно сказал-нужно какую-то мат.функцию использовать,ту же регрессию или что еще
ivanivan на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 19.09.2016, 14:56   #691 (permalink)
Активный участник
 
Аватар для ara66676
 
Регистрация: 21.10.2012
Адрес: Ростов на Дону
Сообщений: 400
Репутация: 46
ara66676
Сказал(а) спасибо: 19
Поблагодарили 30 раз(а) в 24 сообщениях
Поинты: 496
Отправить сообщение для ara66676 с помощью Skype™
Сообщение от ivanivan Посмотреть сообщение
ну так я не резалты теста прошу показать,а кривульку-синтетик, который ты получил
ВОТ показываю кривульку которую расчитал робот, красная вертикальная жирная стартовая точка,синяя вертикальная конечная точка тренда. От синей до зелёной участок флета в пять раз меньший чем трендовый ход. сразу за зелёной вертикальной вход в позицию (пробой флета вверх).
Синтетик состоит из :
AUDUSD= BUY 1.33
EURCAD= SELL 0.68
GBPAUD= SELL 0.57
GBPJPY= SELL0.74

кривулька

[свернуть]
ara66676 на форуме   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
ivanivan (19.09.2016)
Старый 19.09.2016, 15:11   #692 (permalink)
Активный участник
 
Аватар для ivanivan
 
Регистрация: 27.11.2013
Сообщений: 455
Репутация: 141
ivanivan ivanivan
Сказал(а) спасибо: 62
Поблагодарили 140 раз(а) в 63 сообщениях
Поинты: 491
Сообщение от ara66676 Посмотреть сообщение
ВОТ показываю кривульку которую расчитал робот, красная вертикальная жирная стартовая точка,синяя вертикальная конечная точка тренда. От синей до зелёной участок флета в пять раз меньший чем трендовый ход. сразу за зелёной вертикальной вход в позицию (пробой флета вверх).
Синтетик состоит из :
AUDUSD= BUY 1.33
EURCAD= SELL 0.68
GBPAUD= SELL 0.57
GBPJPY= SELL0.74

кривулька

[свернуть]
видел я что-то подобное в теме по баблокосу)) возможно,вот это сможет спасти жизнь отцу русской демократии и облегчить ему расчеты))
_https://www.mql5.com/ru/code/1146
ivanivan на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 19.09.2016, 15:17   #693 (permalink)
Активный участник
 
Аватар для ara66676
 
Регистрация: 21.10.2012
Адрес: Ростов на Дону
Сообщений: 400
Репутация: 46
ara66676
Сказал(а) спасибо: 19
Поблагодарили 30 раз(а) в 24 сообщениях
Поинты: 496
Отправить сообщение для ara66676 с помощью Skype™
Сообщение от ivanivan Посмотреть сообщение
видел я что-то подобное в теме по баблокосу)) возможно,вот это сможет спасти жизнь отцу русской демократии и облегчить ему расчеты))
_https://www.mql5.com/ru/code/1146
я уже не раз скачивал и пытался освоить алглиб, но, как и раньше говорил повторюсь. Не понимая сути как и что вычисляется не могу применять тот или инной код. а посему ко всему приходится доходить путём изучений основ математического анализа. Сначала нарисую, потом для себя докажу, в ходе доказательсва получу убеждения и навык и потом его использую. А в слепую брать и пользоваться я не знаю как.... алглиб состоит из кучи, большой кучи функций, и что какая и как делает я не могу разобрать, скажем так она написана грамотно и для грамотных, а я то ведь обычный чел после школы ни фига не видел книжек ))) потому мне трудно понимать...
ara66676 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 19.09.2016, 15:21   #694 (permalink)
Активный участник
 
Аватар для ivanivan
 
Регистрация: 27.11.2013
Сообщений: 455
Репутация: 141
ivanivan ivanivan
Сказал(а) спасибо: 62
Поблагодарили 140 раз(а) в 63 сообщениях
Поинты: 491
Сообщение от ara66676 Посмотреть сообщение
я уже не раз скачивал и пытался освоить алглиб, но, как и раньше говорил повторюсь. Не понимая сути как и что вычисляется не могу применять тот или инной код. а посему ко всему приходится доходить путём изучений основ математического анализа. Сначала нарисую, потом для себя докажу, в ходе доказательсва получу убеждения и навык и потом его использую. А в слепую брать и пользоваться я не знаю как.... алглиб состоит из кучи, большой кучи функций, и что какая и как делает я не могу разобрать, скажем так она написана грамотно и для грамотных, а я то ведь обычный чел после школы ни фига не видел книжек ))) потому мне трудно понимать...
тебе куча функций не нужна. все функции уже сделаны трансом в его индюке. там тебе и расчет тренда,и флета. вот тебе и наглядный пример. можешь попробовать портировать нужные фичи сразу в сов.
ivanivan на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 19.09.2016, 15:25   #695 (permalink)
Активный участник
 
Аватар для ara66676
 
Регистрация: 21.10.2012
Адрес: Ростов на Дону
Сообщений: 400
Репутация: 46
ara66676
Сказал(а) спасибо: 19
Поблагодарили 30 раз(а) в 24 сообщениях
Поинты: 496
Отправить сообщение для ara66676 с помощью Skype™
Сообщение от ivanivan Посмотреть сообщение
тебе куча функций не нужна. все функции уже сделаны трансом в его индюке. там тебе и расчет тренда,и флета. вот тебе и наглядный пример. можешь попробовать портировать нужные фичи сразу в сов.
есть разница, транс подбирает лоты, потому у него получаются кривульки по шаблону, а мне нужно не лотами подобрать а перебрать из заданного колличества вариантов самый подходящий....
по сути ты ведь не можешь у транса в индюке увидеть сразу все варианты, ты ведь задаёшь валютные пары а индюк выбирает пары и лоты....
в моём случае я уже писал получается что для каждой валютной пары свой неизменяемый лот....
Не скрою мысль не раз уже была попробовать использовать его методы и его код, но видимо пока ещё не дорос....
ara66676 на форуме   Ответить с цитированиемОтветить с цитированием  
Старый 19.09.2016, 16:50   #696 (permalink)
Местный знаток
 
Аватар для transcendreamer
 
Регистрация: 19.02.2013
Адрес: путешествую по миру
Сообщений: 1,157
Репутация: 604
transcendreamer - transcendreamer - transcendreamer - transcendreamer - transcendreamer - transcendreamer -
Сказал(а) спасибо: 165
Поблагодарили 604 раз(а) в 282 сообщениях
Поинты: 1173
Сообщение от ara66676 Посмотреть сообщение
а мне нужно не лотами подобрать а перебрать из заданного колличества вариантов самый подходящий....
... и тем самым ты существенно ограничиваешь себя в выборе возможностей и портфели твои будут иметь произвольное поведение, то есть не ты управляешь портфелями, а они управляют тобой.....

Сообщение от ara66676 Посмотреть сообщение
Не понимая сути как и что вычисляется не могу применять тот или инной код.
-- вполне понятная ситуация, поэтому рекомендуется потратить небольшое время на изучение вот этого текста _http://www.statistica.ru/theory/osnovy-lineynoy-regressii/ и здесь не требуется специальных знаний, а затем вот это: _http://www.statistica.ru/theory/mnozhestvennaya-lineynaya-regressiya/ прочитав эти два недлинных текста каждый сумеет применять регрессию для любых задач (там скриншоты программы statistica, весьма полезный пакет для изучения, конечно не такой крутой как R зато полностью подобен экселю и наглядный)

Сообщение от ara66676 Посмотреть сообщение
и будет дельным чтото поменять.
-- прежде всего надо поменять подход, сейчас ты пишешь код линейно, вписывая все подряд, это годится только для очень простых программ, попробуй выделять отдельные смысловые фрагменты в функции, например вместо того чтобы вычислять стоимость пункта каждый раз имеет смысл написать функцию и вызывать её по мере надобности, это поможет сохранить код понятным и читаемым.....

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

операции с текстовыми строками лучше производить не полагаясь на жёстко заданные позиции символов, а использовать правильный парсинг строк, например ты обрезаешь символьную строку чтобы вытащить имя инструмента из неё и делаешь это 4 раза, хорошо что у тебя только 4 инструмента, а если бы их было 10 или 20? посмотри функцию DefineFormula из "модельера"....

аналогично со стоимостью пункта, посмотри на функцию ContractValue, хотя в твоем случае тебе достаточно брать текущую стоимость поэтому ты можешь ограничиться price_range/ticksize*tickvalue; а вместо StringFind(Symbol1,"JPY") лучше использовать
стандартные функции SymbolInfoString(Symbol1,SYMBOL_CURRENCY_BASE) и SymbolInfoString(Symbol1,SYMBOL_CURRENCY_PROFIT) а вообще для определения пункта цены служит функция SymbolInfoDouble(symbol,SYMBOL_POINT) и тогда не придется корячится с проверками на наличие йены, рекомендую почитать описание стандартных функций в справке, там много полезного...

ручное программирование вариантов (переменная variant) это настолько архаика что кажется даже древние чернобородые шумеры из Междуречья взглянули бы с ужасом на этот код.... попробуй создать нормальный массив направлений int DIRECTIONS[4], где +1 будет положительное а -1 отрицательное направление и сделай 4 вложенных цикла с перебором значений, тогда потом будешь просто умножать лоты на соответствующее значений из DIRECTIONS и все будет хорошо...

вместо того чтобы каждый раз вызывать расчет эквити Equity_4I_Pairs лучше сначала рассчитать эквити каждого отдельного инструмента а потом просто собирать эквити портфеля из компонентов не забывая домножать их на лоты..... а вообще надо бы организовать хранение данных несколько иначе, но я не буду сейчас этого касаться, так как все равно это пока будет бесполезно на текущем этапе.....

оценка эквити на участках - это в принципе нормальный метод, но нужно помнить что портфели могут скакать, поэтому лучше сначала сгладить эквити каким-нибудь мувингом и оценивать уже его, это будет более плавная статистика...... что же касается самого подхода то я уже писал выше какие тут могут быть недостатки, стандартные ошибки модели не так уж много информации дают, а учитывая что собственно говоря никакой модели ты и не строил, то это вообще информация в воздухе висит, с тем же успехом (и даже более надёжно) можно было бы оценивать отклонения от мувинга например периода 144 и получать состояния отклонённости портфеля

писать русские слова латиницей это дурной тон! Prognoz_Valut=true; Lot_Raschet=true; выглядит это ужасно

Последний раз редактировалось NSerega; 19.09.2016 в 23:17.
transcendreamer вне форума   Ответить с цитированиемОтветить с цитированием  
2 пользователя(ей) сказали cпасибо:
ara66676 (19.09.2016), ivanivan (19.09.2016)
Старый 19.09.2016, 18:16   #697 (permalink)
Новичок форума
 
Аватар для acronis7
 
Регистрация: 15.10.2013
Сообщений: 201
Репутация: 8
acronis7
Сказал(а) спасибо: 18
Поблагодарили 11 раз(а) в 10 сообщениях
Поинты: 230
Сообщение от ara66676 Посмотреть сообщение
есть разница, транс подбирает лоты, потому у него получаются кривульки по шаблону, а мне нужно не лотами подобрать а перебрать из заданного колличества вариантов самый подходящий....
по сути ты ведь не можешь у транса в индюке увидеть сразу все варианты, ты ведь задаёшь валютные пары а индюк выбирает пары и лоты....
в моём случае я уже писал получается что для каждой валютной пары свой неизменяемый лот....
Не скрою мысль не раз уже была попробовать использовать его методы и его код, но видимо пока ещё не дорос....
ты столько времени потратил на написание этого кода. лучше б потратил его на на раздупление в lrbuild, уже б наверное осилил.)
я тоже пытался разобраться в этом lrbuild, даже справку читал на англицом, но тоже нихрена не понял)))
и транс не хочет нам помочь мутить регрессию в индикаторах.

вот справка по lrbuild.
Код:
lrbuild function

/*************************************************************************
Linear regression

Subroutine builds model:

    Y = A(0)*X[0] + ... + A(N-1)*X[N-1] + A(N)

and model found in ALGLIB format, covariation matrix, training set  errors
(rms,  average,  average  relative)   and  leave-one-out  cross-validation
estimate of the generalization error. CV  estimate calculated  using  fast
algorithm with O(NPoints*NVars) complexity.

When  covariation  matrix  is  calculated  standard deviations of function
values are assumed to be equal to RMS error on the training set.

INPUT PARAMETERS:
    XY          -   training set, array [0..NPoints-1,0..NVars]:
                    * NVars columns - independent variables
                    * last column - dependent variable
    NPoints     -   training set size, NPoints>NVars+1
    NVars       -   number of independent variables

OUTPUT PARAMETERS:
    Info        -   return code:
                    * -255, in case of unknown internal error
                    * -4, if internal SVD subroutine haven't converged
                    * -1, if incorrect parameters was passed (NPoints<NVars+2, NVars<1).
                    *  1, if subroutine successfully finished
    LM          -   linear model in the ALGLIB format. Use subroutines of
                    this unit to work with the model.
    AR          -   additional results


  -- ALGLIB --
     Copyright 02.08.2008 by Bochkanov Sergey
*************************************************************************/
void alglib::lrbuild(
    real_2d_array xy,
    ae_int_t npoints,
    ae_int_t nvars,
    ae_int_t& info,
    linearmodel& lm,
    lrreport& ar);
есть два графика eurusd и gbpusd. как одному из них коэффициент подобрать с помощью этой функции?
кто шарит?
acronis7 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 19.09.2016, 18:40   #698 (permalink)
Местный знаток
 
Аватар для transcendreamer
 
Регистрация: 19.02.2013
Адрес: путешествую по миру
Сообщений: 1,157
Репутация: 604
transcendreamer - transcendreamer - transcendreamer - transcendreamer - transcendreamer - transcendreamer -
Сказал(а) спасибо: 165
Поблагодарили 604 раз(а) в 282 сообщениях
Поинты: 1173
Сообщение от acronis7 Посмотреть сообщение
но тоже нихрена не понял)))
да как же так? вот ты же сам ниже фрагмент пастишь

Сообщение от acronis7 Посмотреть сообщение
мутить регрессию в индикаторах
это как? о_О

Сообщение от acronis7 Посмотреть сообщение
Y = A(0)*X[0] + ... + A(N-1)*X[N-1] + A(N)
это уравнение линейной регрессии
обычный многочлен
в особом представлении не нуждается
единственно что я выбрасываю свободный член
ведь у меня изначально профиты единичного лота всех инструментов
(профиты = дельта стоимостей по времени)
поэтому свободный член мне не нужен и я использую LRBuildZ
а если брать стоимость контрактов as is (не профит) тогда был бы нужен
тогда точка старта будет не нуль
на мой взгляд удобнее когда портфель растет из нуля

Сообщение от acronis7 Посмотреть сообщение
covariation matrix, training set errors
это пока благополучно пропускаем
это не так уж важно сейчас

Сообщение от acronis7 Посмотреть сообщение
INPUT PARAMETERS:
что пихать на вход

Сообщение от acronis7 Посмотреть сообщение
XY - training set, array [0..NPoints-1,0..NVars]
матрица данных
в ней должны быть ряды данных эквити всех инструментов 1 лота

Сообщение от acronis7 Посмотреть сообщение
* NVars columns - independent variables
сначала все инструменты в произвольном порядке рядов

Сообщение от acronis7 Посмотреть сообщение
* last column - dependent variable
в последний ряд заводим целевую функцию
либо эталонную корзину

Сообщение от acronis7 Посмотреть сообщение
NPoints - training set size, NPoints>NVars+1
число точек данных (должно быть больше чем число инструментов+1)

Сообщение от acronis7 Посмотреть сообщение
NVars - number of independent variables
число инструментов в портфеле

Сообщение от acronis7 Посмотреть сообщение
OUTPUT PARAMETERS:
что на выходе

Сообщение от acronis7 Посмотреть сообщение
Info - return code:
код статуса

Сообщение от acronis7 Посмотреть сообщение
LM - linear model in the ALGLIB format.
собственно модель
это объект специального типа
из него надо достать (LRUnpack) корни уравнения

Сообщение от acronis7 Посмотреть сообщение
AR - additional results
какая-то хрень

Сообщение от acronis7 Посмотреть сообщение
есть два графика eurusd и gbpusd. как одному из них коэффициент подобрать с помощью этой функции?
один заводим в матрицу как обычно
второй тоже в матрицу но в качестве функции (независимой переменной)
получаем корни
точнее тут будет 1 корень только для первого
второй благополучно переносим в другую часть уравнения
для него коэффициент = -1
в готовом виде все есть в функции CalculateOptimization
transcendreamer вне форума   Ответить с цитированиемОтветить с цитированием  
Пользователь сказал cпасибо:
acronis7 (19.09.2016)
Старый 19.09.2016, 19:32   #699 (permalink)
Новичок форума
 
Аватар для acronis7
 
Регистрация: 15.10.2013
Сообщений: 201
Репутация: 8
acronis7
Сказал(а) спасибо: 18
Поблагодарили 11 раз(а) в 10 сообщениях
Поинты: 230
Сообщение от transcendreamer Посмотреть сообщение
в готовом виде все есть в функции CalculateOptimization
Что это за функция?
acronis7 вне форума   Ответить с цитированиемОтветить с цитированием  
Старый 19.09.2016, 19:35   #700 (permalink)
Местный знаток
 
Аватар для transcendreamer
 
Регистрация: 19.02.2013
Адрес: путешествую по миру
Сообщений: 1,157
Репутация: 604
transcendreamer - transcendreamer - transcendreamer - transcendreamer - transcendreamer - transcendreamer -
Сказал(а) спасибо: 165
Поблагодарили 604 раз(а) в 282 сообщениях
Поинты: 1173
Сообщение от acronis7 Посмотреть сообщение
Что это за функция?
из модельера, считает регрессию, там в общем виде задача решается
transcendreamer вне форума   Ответить с цитированиемОтветить с цитированием  
Ответ

Метки
мультивалютные корзины, парный трейдинг, синтетические инструменты, хеджирование


Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.



Текущее время: 10:52. Часовой пояс GMT.


Перевод: zCarot
Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
SEO by vBSEO