Здравствуйте, гость ( Вход | Регистрация )

26 страниц V « < 18 19 20 21 22 > »   
Ответить в эту темуОткрыть новую тему
> Perceptron, Нейронная сеть
leonid553
сообщение 11.8.2007, 12:53
Сообщение #191





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



Поставил вопрос на MQ
http://forum.mql4.com/ru/7838
Но ответа пока нет....
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 13.8.2007, 15:22
Сообщение #192





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



to NoName:
Вот ещё идея подошла!
Нет необходимости ограничивать число пар в советнике. Можно заложить в него 5-8 пар. Которые удовлетворительно работают по этой тактике. А число открытых ордеров при необходимости мы можем ограничить, если в условие открытия каждой пары добавим примерно вот такую конструкцию:
Код
if ExpertOrder (int VersionID)<=3 //если откр. позиций меньше 3-х
{
if (GBP) {     //если ордеров по паре GBPUSD нет и "выключатель" включен
{
if (!ExpertOrder(MagicGBP))
{
.... ... ...
//-----------------------------------------
bool ExpertOrder (int VersionID)

Глянь на почту.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 17.8.2007, 13:36
Сообщение #193





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



Решил проблему с библиотекой "b-lots".
Добавил пару строчек и ввел ограничение.

Заложил в мультивалютную версию кроме классических и ещё одну - с вызовом индикатора I-Stoch_Env/
Но почему-то она не дает работать советнику. Хотя сама работает.
Мешает вот этот блок:

double Env__low[2];
//double Env__up [2];
//double Env__low_[2];
double Env__up_ [2];

double St[2];
Env__low[0]= iCustom(NULL,0,"i-StochEnv",Stoch_period,3,3,Env_period, Env_deviation,1,2,0);
St[0] = iCustom(NULL,0,"i-StochEnv",Stoch_period,3,3,Env_period, Env_deviation,1,0,0);
St[1] = iCustom(NULL,0,"i-StochEnv",Stoch_period,3,3,Env_period, Env_deviation,1,0,1);

double St_[2];
Env__up_[0] = iCustom(NULL,0,"i-StochEnv",Stoch_period_SELL,3,3,Env_period_SELL , Env_deviation_SELL,1,1,0);
St_[0] = iCustom(NULL,0,"i-StochEnv",Stoch_period_SELL,3,3,Env_period_SELL, Env_deviation_SELL,1,0,0);
St_[1] = iCustom(NULL,0,"i-StochEnv",Stoch_period_SELL,3,3,Env_period_SELL, Env_deviation_SELL,1,0,1);
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 20.8.2007, 17:53
Сообщение #194





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



Цитата(NoName @ 31.7.2007, 17:22) *

Немного подумал и решил что всё же грамотнее будет использовать библиотеку.
Подправил для этой цели трал Игоря Кима.

Подключить как обычно:
#include <a-SimpleTrailingMod.mqh>

Вызывать: TrailingPositions(Magic);
В функцию нужно передавать Magic той позиции, которую нужно тралить.

Запутался я в мультивалютке с тралами! В онлайне трал с грехом пополам работает по одной паре и печатает ошибку
2007.08.20 22:49:52 MULUTIE_v1 GBPUSD,M1: Error(130) modifying SL:
Это - у меня на каждую пару свой трал.
Но если я воспользуюсь твоей модиф. библиотекой, то что получается?
Получается, что сразу по всем парам будут задаваться одинаковые значения Трейлинга?
НО зачем нужна такая библиотека?
Ведь каждая пара оптимизирована со своим значением трейлинга!
Или я что-то не понял?
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Dimi
сообщение 29.8.2007, 13:52
Сообщение #195





Группа: Активный участник
Сообщений: 236
Регистрация: 12.4.2006
Пользователь №: 14
Спасибо сказали: 2 раз(а)



Вот попробовал на скорую руку советника сделать по амкам, знающие люди Помогите, Hilfe, Help!!!! smile.gif



Код
double CrossUp[];
double CrossDown[];

extern string AMkA1 ="Параметры 1 AMkA";
extern int       periodAMA    = 14;    //период расчёта к-та эффективности
extern double    nfast        = 2;    //период EMA для эффективного рынка
extern double    nslow        = 30;   //период EMA для неэффективного рынка
//---- расчёт сглаживающей константы
extern double    Pow          = 2.0;  //степень эффективности
//---- фильтр сигналов
extern double    dK           = 1.0;  //коэффициент для фильтра
extern bool      use_stdev    = true; //использовать стандартное отклонение
//---- применять к цене
extern int       app_price    = 5;    //по умолчанию - к типической

extern string AMkA2 ="Параметры 2 AMkA";
extern int       periodAMA2    = 40;    //период расчёта к-та эффективности
extern double    nfast        = 2;    //период EMA для эффективного рынка
extern double    nslow        = 30;   //период EMA для неэффективного рынка
//---- расчёт сглаживающей константы
extern double    Pow          = 2.0;  //степень эффективности
//---- фильтр сигналов
extern double    dK           = 1.0;  //коэффициент для фильтра
extern bool      use_stdev    = true; //использовать стандартное отклонение
//---- применять к цене
extern int       app_price    = 5;    //по умолчанию - к типической

extern double Deviation1 = -0.01;
extern double Deviation2 = -0.02;
extern double Arrow_Delta1 = 1.5;
extern double Arrow_Delta2 = 1.5;
static int PrevBar = 0;
//-------------------
extern int     TP=30;
extern int     SL=30;
//extern double  Lot=0.1;
extern int     Slippage=3;
//-------------------
int    ticket;
int    MAGIC;

color    clModifyBuy  = Green;
color    clModifySell = Blue;
//-- Подключаемые модули --
#include  <b-Lots.mqh>
#include  <a-SimpleTrailing.mqh>
//---------------------------

//*********************************************************************

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----

   SetIndexLabel(2, "Fast_AMkA ("+nfast+")");
   SetIndexLabel(3, "Slow_AMkA ("+nfast2+")");
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
  
//----
   return(0);
  }

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {

//----
int limit, i, counter;
   double fasterMAnow, slowerMAnow, fasterMAprevious, slowerMAprevious, fasterMAafter, slowerMAafter;
   double Range, AvgRange;
   int counted_bars=IndicatorCounted();
//---- check for possible errors
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   if(counted_bars>0) counted_bars--;

   limit=Bars-counted_bars;
  
   for(i = 0; i <= limit; i++) {
  
      counter=i;
      Range=0;
      AvgRange=0;
      for (counter=i;counter<=i+9;counter++)
      {
         AvgRange=AvgRange+MathAbs(High[counter]-Low[counter]);
      }
      Range=AvgRange/10;

      [b]fasterMAnow = (1+Deviation1/100)*iCustom(NULL, 0, "AMkA",periodAMA,nfast,nslow,Pow,dK,use_stdev,app_price,0,i);
      fasterMAprevious = (1+Deviation1/100)*iCustom(NULL, 0, "AMkA",periodAMA,nfast,nslow,Pow,dK,use_stdev,app_price,0,i+1);
      fasterMAafter = (1+Deviation1/100)*iCustom(NULL, 0, "AMkA",periodAMA,nfast,nslow,Pow,dK,use_stdev,app_price,0,i-1);

      slowerMAnow = (1+Deviation2/100)*iCustom(NULL, 0, "AMkA",periodAMA2,nfast2,nslow2,Pow2,dK2,use_stdev2,app_price2,0,i);
      slowerMAprevious = (1+Deviation2/100)*iCustom(NULL, 0, "AMkA",periodAMA2,nfast2,nslow2,Pow2,dK2,use_stdev2,app_price2,0,i+1);
      slowerMAafter = (1+Deviation2/100)*iCustom(NULL, 0, "AMkA",periodAMA2,nfast2,nslow2,Pow2,dK2,use_stdev2,app_price2,0,i-1);
//===== Ищем возможность войти в рынок =========================================================

int Orders=OrdersTotal ();     //получаем кол-во открытых ордеров
if (Orders==0)                 //если нет открытых ордеров
  {  
//---------проверяем условие на покупку----------------------------
            if ((fasterMAnow > slowerMAnow) && (fasterMAprevious < slowerMAprevious)
            && (fasterMAafter > slowerMAafter)
            && (Time[0] != PrevBar))
               {CrossUp[i] = MathMin(fasterMAnow,Low[i]) - Arrow_Delta1*Range*0.5;
   {
  Lots=GetSizeLot();
  ticket=OrderSend(Symbol(),0,Lots,Ask,Slippage,Bid-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE);
  if    (ticket<0) { Print("Ошибка открытия ордера BUY #", GetLastError()); return (0); }  
  else
     {
     if (OrderSelect(ticket, SELECT_BY_TICKET) == true)
    
        { MAGIC=OrderMagicNumber(); }
        
     else  { Print("Ошибка при выборе ордера BUY #", GetLastError() ); }
     }            
   }
//------------------------------------------------------------------

//--------проверяем условие на продажу------------------------------
          if ((fasterMAnow < slowerMAnow) && (fasterMAprevious > slowerMAprevious)
            && (fasterMAafter < slowerMAafter)
            && (Time[0] != PrevBar))
               {CrossDown[i] = MathMax(fasterMAnow,High[i]) + Arrow_Delta2*Range*0.5;
   {
  Lots=GetSizeLot();      
  ticket=OrderSend(Symbol(),1,Lots,Bid,Slippage,Bid+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE);
  if (ticket<0) { Print("Ошибка открытия ордера SELL #", GetLastError()); return (0); }
  else
     {
     if (OrderSelect(ticket, SELECT_BY_TICKET) == true)
    
       { MAGIC=OrderMagicNumber(); }
      
     else  {Print("Ошибка при выборе ордера SELL #", GetLastError() ); }
     }                
   }
  
//------------------------------------------------------------------
  }
//===============================================================================================
if (UseTrailing == true)  TrailingPositions();

//----
   return(0);
  }
//+------------------------------------------------------------------+



Условие работы взял из индюка, который сигналит при пересечении Амок. Не знаю можно так или нельзя blink.gif При компилировании выдает аж 25 ошибок unsure.gif

'Pow' - variable already defined
'dK' - variable already defined
'use_stdev' - variable already defined

в общем вот эти все nfast,nslow,Pow,dK,use_stdev,app_price и nfast2,nslow2,Pow2,dK2,use_stdev2,app_price2, - variable already defined






Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
NoName
сообщение 29.8.2007, 15:07
Сообщение #196





Группа: Активный участник
Сообщений: 514
Регистрация: 1.5.2006
Из: Украина, Кременчуг
Пользователь №: 146
Спасибо сказали: 0 раз(а)



Скажу сразу что в суть кода не вникал.

variable already defined - переменная уже определена

То есть эти ошибки указывают на то что одна и та же переменная объявляется несколько раз. Этого делать нельзя. Переменная должна быть объявлена один при первом её упоминании в коде.

P.S.
Обрати внимание на то место где ты перечисляешь внешние параметры.

extern string AMkA1 ="Параметры 1 AMkA";
extern int periodAMA = 14; //период расчёта к-та эффективности
extern double nfast = 2; //период EMA для эффективного рынка
extern double nslow = 30; //период EMA для неэффективного рынка
//---- расчёт сглаживающей константы
extern double Pow = 2.0; //степень эффективности
//---- фильтр сигналов
extern double dK = 1.0; //коэффициент для фильтра
extern bool use_stdev = true; //использовать стандартное отклонение
//---- применять к цене
extern int app_price = 5; //по умолчанию - к типической

extern string AMkA2 ="Параметры 2 AMkA";
extern int periodAMA2 = 40; //период расчёта к-та эффективности
extern double nfast = 2; //период EMA для эффективного рынка
extern double nslow = 30; //период EMA для неэффективного рынка
//---- расчёт сглаживающей константы
extern double Pow = 2.0; //степень эффективности
//---- фильтр сигналов
extern double dK = 1.0; //коэффициент для фильтра
extern bool use_stdev = true; //использовать стандартное отклонение
//---- применять к цене
extern int app_price = 5; //по умолчанию - к типической

Выделенные переменные должны иметь другое название. Например nfast2, nslow2 и т.д.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 29.8.2007, 17:39
Сообщение #197





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



Dimi, возьми для начала одно - самое простое условие и заявляй для начала одну- две своих переменных. Не два десятка!
Разберись, чем отличаются double, int, bool
а ТАКЖЕ - как правильно записать iCustom
Что бы тебе не лазить по лекциям и путаным комментариям сделай так, как по рекомендации Hеlen-ы делал я когда - то:
Например. Установи в метаэдиторе в меню русский язык.
Далее в коде советника выдели мышкой интересующий тебя термин.
Например iCustom. После чего смело нажимай клавишу F1 !
и ты получишь справку - что такое iCustom - в самом низу метаэдитора. И как им правильно пользоваться. ----------------------------------------------------------------------------------------------
NoName совершенно верно заметил.
Ты одно название (например extern double nfast ) ЗАЯВЛЯВЛЯЕШЬ два раза! Во второй раз надо присвоить другое название. Т.к. это уже другая ЕМА
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 29.8.2007, 18:03
Сообщение #198





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



но сначала вот что. В мт4 два типа индикаторов. Встроенные и пользовательские. Для того чтобы вызвать их в советник нужно по различному их вызывать.
Встроенные вызваются ( в разделе int start() ):
double Stochastic_0=iStochastic(NULL, 0, Stochastic_period, 3,3,MODE_SMA,0,MODE_MAIN, 0);
Пользовательские вызываются:
double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)
Для начала поясни - что ты хочешь сделать. Как использовать индикатор . Например , назови хотя бы одно из условий на вход и мы попробуем его реализовать в коде.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Dimi
сообщение 29.8.2007, 20:28
Сообщение #199





Группа: Активный участник
Сообщений: 236
Регистрация: 12.4.2006
Пользователь №: 14
Спасибо сказали: 2 раз(а)



Дааа блин, как все запущенно..... scare.gif Разбираться и разбираться еще.... Бум читать, учиться...
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 30.8.2007, 5:44
Сообщение #200





Группа: Активный участник
Сообщений: 2 002
Регистрация: 14.4.2006
Из: г.Самара
Пользователь №: 28
Спасибо сказали: 11 раз(а)



double iCustom( string symbol, int timeframe, string name, ..., int mode, int shift)

Расчет указанного пользовательского индикатора. Параметры:

symbol - Символьное имя инструмента, на данных которого будет вычисляться индикатор. NULL означает текущий символ.
timeframe - Период. Может быть одним из периодов графика. 0 означает период текущего графика.
name - Имя пользовательского индикатора.
... - Список параметров (при необходимости).
Передаваемые параметры должны соответствовать порядку объявления и типу внешних (extern) переменных пользовательского индикатора.
mode - Индекс линии индикатора. Может быть от 0 до 7 и должен соответствовать индексу, используемому одной из функций SetIndexBuffer.
shift - Индекс получаемого значения из индикаторного буфера (сдвиг относительно текущего бара на указанное количество периодов назад).

Пример:
double val=iCustom(NULL, 0, "SampleInd",13,1,0);
*******************************************************
'Это в справке так изложено. У тебя в коде значится:
iCustom(NULL, 0, "AMkA",periodAMA,nfast,nslow,Pow,dK,use_stdev,app_price,0,i);

Остановимся для начала на периоде. Пусть у нас будет покупка когда Амка с малым периодом (быстрая) пересекает Амку с большим периодом (медленную) снизу вверх.
Продажа - соответственно наоборот - сверху вниз.
Таким образом во внешних параметрах советника будут заданы для начала эти периоды.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

26 страниц V « < 18 19 20 21 22 > » 
Ответить в эту темуОткрыть новую тему

 



- Текстовая версия Сейчас: 11.5.2025, 21:08