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

26 страниц V « < 19 20 21 22 23 > »   
Ответить в эту темуОткрыть новую тему
> Perceptron, Нейронная сеть
leonid553
сообщение 30.8.2007, 6:55
Сообщение #201





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



Код
//+------------------------------------------------------------------+
// |Амка
// | Dimi
//| http://www.tradersforum.net.ru/
//+------------------------------------------------------------------+
#property copyright "Dimi"
#property link "http://www.tradersforum.net.ru/"

//---- input parameters---------
extern int periodAMA_1=13;
extern int periodAMA_2=34;
//------------------------------
extern int TP=30;
extern int SL=30;
extern double Lot=0.1;
extern int Slippage=3;

int ticket;

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

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
return(0);
}

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

// вычисляем текущие значения Амок быстрой и медленной
double AMKA1_0 = iCustom(NULL, 0, "AMkA", periodAMA_1 ,nfast,nslow,Pow,dK,use_stdev,app_price,0,0);
double AMKA2_0 = iCustom(NULL, 0, "AMkA", periodAMA_2 ,nfast,nslow,Pow,dK,use_stdev,app_price,0,0);

// вычисляем предыдущее значения Амки быстрой
double AMKA1_1 = iCustom(NULL, 0, "AMkA", periodAMA_1 ,nfast,nslow,Pow,dK,use_stdev,app_price,0,1);

//===== Ищем возможность войти в рынок =========================================================

int Orders=OrdersTotal (); //получаем кол-во открытых ордеров
if (Orders==0) //если нет открытых ордеров
{
//---------проверяем условие на покупку----------------------------
if ( бла-бла-бла )
{
ticket=OrderSend(Symbol(),0,Lot,Ask,Slippage,Bid-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE);
if (ticket<0) { Print("Ошибка открытия ордера BUY #", GetLastError()); return (0); }
}
//------------------------------------------------------------------

//--------проверяем условие на продажу------------------------------
if (бла- бла - бла)
{
ticket=OrderSend(Symbol(),1,Lot,Bid,Slippage,Bid+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE);
if (ticket<0) { Print("Ошибка открытия ордера SELL #", GetLastError()); return (0); }
}

//------------------------------------------------------------------
}
//====================================================================

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

Вместо параметров :
nfast,nslow,Pow,dK,use_stdev,app_price
Нужно задать пока конкретные числа. Кот . у тебя стоят по умолчанию.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Dimi
сообщение 30.8.2007, 7:11
Сообщение #202





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



Привет!!! Давай наверное начнем с самого начала. Я так понял, что вот эти (nfast,nslow,Pow,dK,use_stdev,app_price) вообще не нужны или??? Тогда получиться, где вводим переменные

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

extern string AMkA1 ="Параметры 1 AMkA";
extern int       periodAMA    = 14;    //период расчёта к-та эффективности
extern string AMkA2 ="Параметры 2 AMkA";
extern int       periodAMA2    = 40;    //период расчёта к-та эффективности
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 start function                                            |
//+------------------------------------------------------------------+
int start()
  {

double val=iCustom(NULL, 0, "AMkA",periodAMA,0,i);



О, пока я тут все сочинял, ты уже написал!!! smile.gif
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 30.8.2007, 10:27
Сообщение #203





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



Значения (nfast,nslow,Pow,dK,use_stdev,app_price) нам нужны. Но мы не будем их делать пока переменными. Оставим их постоянными. И в
iCustom(NULL, 0, "AMkA", periodAMA_1 ,nfast,nslow,Pow,dK,use_stdev,app_price,0,0);
мы вствим вместо них - их числовые значения кот. стоят по умолчанию в самом индюке.
nfast=2,
nslow=30,
Pow=2,
dK=1,
pp_price=5

А вот параметр use_stdev=true, - правильно ли он поставлен в iCustom ? Да и др. параметры тоже...
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 30.8.2007, 10:52
Сообщение #204





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



условия на покупку - вместо
if (бла- бла-бла)

if ((AMKA1_1 < AMKA2_0) && (AMKA1_0 > AMKA2_0) )
// покупаем
//**************************************************
на продажу:
if ((AMKA1_1 > AMKA2_0) && (AMKA1_0 < AMKA2_0) )
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Dimi
сообщение 30.8.2007, 11:21
Сообщение #205





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



Если кто знает, отзовитесь пожалуйста!!!

Вот это условие правильно записано???

Код
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{

// вычисляем текущие значения Амок быстрой и медленной
double AMKA1_0 = iCustom(NULL, 0, "AMkA", periodAMA_1 ,2,30,2,1,5,0,0);
double AMKA2_0 = iCustom(NULL, 0, "AMkA", periodAMA_2 ,2,30,2,1,5,0,0);

// вычисляем предыдущее значения Амки быстрой
double AMKA1_1 = iCustom(NULL, 0, "AMkA", periodAMA_1 ,2,30,2,1,5,0,0);


Вот этот вот iCustom непонятно
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 30.8.2007, 13:17
Сообщение #206





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



вот только обратил внимание, что индюк работае скорее всего по открытиям баров. Не по тикам.
Это означает, что надо ввести в советник соотв. условие.
Тогда последний "0" в строке, - это значение Амок ( быстр. и медл.) на вновь только что открывшемся баре.
double AMKA1_0 = iCustom(NULL, 0, "AMkA", periodAMA_1 ,2,30,2,1,5,0,0);
double AMKA2_0 = iCustom(NULL, 0, "AMkA", periodAMA_2 ,2,30,2,1,5,0,0);

А в след. строке - "1" - означает значение индюка на предыдущем баре.
double AMKA1_1 = iCustom(NULL, 0, "AMkA", periodAMA_1 ,nfast,nslow,Pow,dK,use_stdev,app_price,0,1);

- у тебя неверно скопировано - глянь внимательнее! (посл. цифра=1 а не 0 как у тебя )

ВВел в код условие работы по ценам открытия.
И вроде заработал эксперт.
Код

//+------------------------------------------------------------------+
// |Амка
// | Dimi
//| http://www.tradersforum.net.ru/
//+------------------------------------------------------------------+
#property copyright "Dimi"
#property link "http://www.tradersforum.net.ru/"

//---- input parameters---------
extern int periodAMA_1=13;
extern int periodAMA_2=34;
//------------------------------
extern int TP=55;
extern int SL=55;
extern double Lot=0.1;
extern int Slippage=3;

int ticket;
static int    prevtime = 0;


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

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
return(0);
}

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
if(Time[0] == prevtime)
       return(0);  
   prevtime = Time[0];

  // вычисляем текущие значения Амок быстрой и медленной
double AMKA1_0 = iCustom(NULL, 0, "AMkA", periodAMA_1 ,2,30,2,1,5,0,0);
double AMKA2_0 = iCustom(NULL, 0, "AMkA", periodAMA_2 ,2,30,2,1,5,0,0);

// вычисляем предыдущее значения Амки быстрой
double AMKA1_1 = iCustom(NULL, 0, "AMkA", periodAMA_1 ,2,30,2,1,5,0,1);

//===== Ищем возможность войти в рынок =========================================================

int Orders=OrdersTotal (); //получаем кол-во открытых ордеров
if (Orders==0) //если нет открытых ордеров
{
//---------проверяем условие на покупку----------------------------
if ((AMKA1_1 < AMKA2_0) && (AMKA1_0 > AMKA2_0) )

{
ticket=OrderSend(Symbol(),0,Lot,Ask,Slippage,Bid-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE);
if (ticket<0) { Print("Ошибка открытия ордера BUY #", GetLastError()); return (0); }
}
//------------------------------------------------------------------

//--------проверяем условие на продажу------------------------------
if ((AMKA1_1 > AMKA2_0) && (AMKA1_0 < AMKA2_0) )

{
ticket=OrderSend(Symbol(),1,Lot,Bid,Slippage,Bid+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE);
if (ticket<0) { Print("Ошибка открытия ордера SELL #", GetLastError()); return (0); }
}

//------------------------------------------------------------------
}
//====================================================================

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

Тестировать нужно по ценам открытия.
И даже с этими параметрами от фонаря - показал прибыль за 2007г. на н4 по фунту.!
Но что-то не совсем пока корректно он работает.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Dimi
сообщение 31.8.2007, 6:38
Сообщение #207





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



Вот глянь, Леонид. Вставил твои библиотеки.

Прикрепленный файл  Sovetnik_Amka.rar ( 4.46 килобайт ) Кол-во скачиваний: 354
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 31.8.2007, 9:30
Сообщение #208





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



Надо разобраться с
iCustom(NULL, 0, "AMkA", periodAMA_1 ,2,30,2,1,5,0,0);
Похоже здесь ошибка у нас
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
leonid553
сообщение 1.9.2007, 17:14
Сообщение #209





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



to NoName,
для блокировки никак не могу разобраться с таким вариантом открытия (в др. вариант вставил):

Код
bool isNewBar=false;
if (ExpertBars !=Bars) {ExpertBars=Bars; isNewBar=true; }  
int OrdersGBP=OrdersTotal();//ExpertOrder();
if (isNewBar) {
if (OrdersGBP!=0) ZeroBarOrd=true;  //есть ордер
else           ZeroBarOrd=false; //нет ордера
}
//***************************************************************
if (!ZeroBarOrd)      
  {  
//-------Проверяем условие на покупку-------------
if  (     (Stochastic_1<En0_low) &&
          (Stochastic_0>En0_low)      )
    {  
  //---- Цикл открытия ордера  -------------------------------------------                      
int Cnt=1;
  while (Cnt <= 5)
  { //-----покупаем--------------
    Lots=GetSizeLot();
ticketGBP=OrderSend("GBPUSD",OP_BUY,Lots,ask_GBP,3,bid_GBP - sl_GBPUSD_long*point_GBP,
                          ask_GBP+tp_GBPUSD_long*point_GBP,"M_1", MagicGBP, 0, Blue);
         if (ticketGBP > 0)  break;    
else
{ Print ("Ошибка открытия Buy GBP#", ErrorDescription( GetLastError() ),
                                                  " попытка ", Cnt);
                                                                                
        if (Cnt==5) return(0);  //если за 5 попыток не закрыли - выходим
        Cnt++;
        Sleep(15000); // ждём 15 секунд
      }    
    }
  }


Не соображу - куда вставить строку
" else ZeroBarOrd=true; "
Куда ни поставлю - всё невпопад!


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





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



По куску кода сложно понять куда именно его нужно вставить в данном случае. Но основная идея такая: ZeroBarOrd (переменная отвечающая за наличие ордеров на нулевом баре) получает значение true в случаях:
1. При появлении нового бара и наличии открытой позиции, иначе false;
2. При каждом успешном открытии позиции.

1 пункт выполняется строками:
Код
if (isNewBar) {
if (OrdersGBP!=0) ZeroBarOrd=true;  //есть ордер
else           ZeroBarOrd=false; //нет ордера


А что бы выполнился второй пункт нужно вставить:
Код
ZeroBarOrd=true;
после каждого успешного открытия позиции.

Ещё раз напомню что ZeroBarOrd - статическая переменная объявленная на глобальном уровне.
Код
static bool ZeroBarOrd;
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

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

 



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