• Уважаемый гость! Чтобы просмотреть скрытую часть информации Вам нужно зарегистрироваться.

    Быстрая регистрация!

Удалено Вопросы от новичков...

  • Автор темы Admin
  • Дата начала
  • Автор темы
  • Панель управления
  • #1
Admin

Admin

Команда форума
Администратор
Регистрация
03.01.2013
Сообщения
2 226
Реакции
518
Любые вопросы по написанию советников и по возникшим проблемам !
 
S

sanya32

Участник
Регистрация
28.01.2013
Сообщения
11
Реакции
0
Владимир привет, вчера общались по моему вопросу как передать сигнал из индикатора в советник, ты мне кинул
UAA.mq4, вижу что там есть функция, а как это использовать?
я наверное погорячился вчера сказав что разбираюсь в mql, на верное только с учебником.
 
  • Автор темы
  • Панель управления
  • #3
Admin

Admin

Команда форума
Администратор
Регистрация
03.01.2013
Сообщения
2 226
Реакции
518
Здравствуйте !
Приложите код или скопируйте его в эту тему я расскажу.
 
S

sanya32

Участник
Регистрация
28.01.2013
Сообщения
11
Реакции
0
xpMA, это индюк. UAA это функцию ты здесь делал из индюка, Moy это советник я в принципе
добавил еще линию 7-ую в индюк ее в советнике получаю iCustom(Symbol(), 0,"xpMA",7,7,0)
но мне надо что не на каждом тике видеть сигнал, а чтобы когда сигнал появился в индюке, передать его в советник чтобы тот открыл или закрыл ордер
 

Вложения

  • 9 КБ Просмотры: 4
  • 2,6 КБ Просмотры: 4
  • 10,3 КБ Просмотры: 5
  • Автор темы
  • Панель управления
  • #5
Admin

Admin

Команда форума
Администратор
Регистрация
03.01.2013
Сообщения
2 226
Реакции
518
xpMA, это индюк. UAA это функцию ты здесь делал из индюка, Moy это советник я в принципе
добавил еще линию 7-ую в индюк ее в советнике получаю iCustom(Symbol(), 0,"xpMA",7,7,0)
но мне надо что не на каждом тике видеть сигнал, а чтобы когда сигнал появился в индюке, передать его в советник чтобы тот открыл или закрыл ордер
Что то я не могу понять что за 7 линию вы добавили и куда ????
 
  • Like
Реакции: tak
S

sanya32

Участник
Регистрация
28.01.2013
Сообщения
11
Реакции
0
в xpMA

SetIndexBuffer(7,sss);

вот здесь в индюке передается
if(UpBuffer[1] == EMPTY_VALUE && UpBuffer[0] != EMPTY_VALUE && Buffer3[1] != UpBuffer[0])
AlertOnce(Symbol()+ ":" + PeriodToText() + " - Up Signal-"+DoubleToStr(Bid, 4),1);
sss[0]=1;
if(DownBuffer[1] == EMPTY_VALUE && DownBuffer[0] != EMPTY_VALUE && Buffer3[1] != DownBuffer[0])
AlertOnce(Symbol()+ ":" + PeriodToText() + " - Down Signal-"+DoubleToStr(Ask, 4),2);
sss[0]=-1;

как передать это в советник сразу после появления сигнала?
 
  • Автор темы
  • Панель управления
  • #7
Admin

Admin

Команда форума
Администратор
Регистрация
03.01.2013
Сообщения
2 226
Реакции
518
Код:
//+------------------------------------------------------------------+
//|                       XP Moving Average                          | 
//|                                                          Moy.mq4 |
//|                                                                  |
//|                                          http://www.trading-go.ru|
//+------------------------------------------------------------------+
#define MODE_DEMA 4
#define MODE_TEMA 5
#define MODE_T3MA 6
#define MODE_JMA 7
extern string Sovetnic = "Settings";
extern int       period=10;
extern int       TakeProfit=50;
extern int       StopLoss=30;
extern int       Lots=1;
extern string Indikator = "Settings"; 
extern   int      MA_Period               = 24;
extern   int      MA_Type                 = MODE_TEMA;
extern   int      MA_Applied              = PRICE_CLOSE;
extern   double   T3MA_VolumeFactor       = 0.8;
extern   double   JMA_Phase               = 0;
extern   int      Step_Period             = 4;
extern   bool     DebugMode               = false;

bool     Alert_On                = true;
bool     Arrows_On               = true;
int      UpArrowCode             = 233;
int      DownArrowCode           = 234;
color    UpArrowColor            = Red;
color    DownArrowColor          = Blue;
int      UpArrowSize             = 3;
int      DownArrowSize           = 3;

double UpBuffer[];
double DownBuffer[];
double Buffer3[];
double buffer[];
double tempbuffer[];
double matriple[];
double signal[];

int expertBars=0;
double level=0;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
bool isNewBar()
  {
   bool res=false; 
   if (expertBars!=Bars) 
      {
      expertBars=Bars;
      res=true;
      } 
   return(res);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
  double price;
  double stop;
  double profit;
//----
   if ((isNewBar())&&  (OrdersTotal()==0) &&(AccountBalance()>10))// тут немного не правильно 
   {
      level=iCustom(NULL, 0,"xpMA",7,7,0);
      Alert("level= ", level," такой");
      if (level>0)
      {
         //price=NormalizeDouble(Ask,Digits);
         //stop=NormalizeDouble(price-StopLoss*Point,Digits);
         //profit=NormalizeDouble(price+TakeProfit*Point,Digits);
         //OrderSend(Symbol(),OP_BUY,Lots,price,3,stop,profit,NULL,0,0,Green); 
         //Print(AccountBalance());          
      }
      if (level<0)
      {
         //price=NormalizeDouble(Ask,Digits);
         //stop=NormalizeDouble(price+StopLoss*Point,Digits);
         //profit=NormalizeDouble(price-TakeProfit*Point,Digits);
         //OrderSend(Symbol(),OP_SELL,Lots,price,3,stop,profit,NULL,0,0,Green); 
         ////Print(AccountBalance());            
      }     
      
      if ( xMA() == 1 )
      {
      //есть сигнал на покупку и он же сгнал для закрытия селл ордера
      } 
      if ( xMA() == -1 )
      {
      //есть сигнал на продажу и он же сгнал для закрытия бай ордера
      }       
      
   }   
//----
   return(0);
  }
//==============================================================================================//
//  Функция индикатора и его полное тело
//==============================================================================================//
int xMA()
{
   int limit;
   int i = 0;
   
   int counted_bars=IndicatorCounted();

   if(counted_bars<0) return(-1);
   //if(counted_bars>0) counted_bars--;
   limit=Bars-counted_bars-1;
   
   switch (MA_Type)
   {
      case 0:
      case 1:
      case 2:
      case 3:
            {
                  for(i=0; i<limit; i++)
                  {
                     buffer[i] = iMA(NULL,0,MA_Period,0,MA_Type,MA_Applied,i);
                  }
            }
            break;
      
      case 4:
            {
                  for(i=0; i<limit; i++)
                  {
                     tempbuffer[i] = iMA(NULL,0,MA_Period,0,MODE_EMA,MA_Applied,i);
                  }
                  for(i=0; i<limit; i++)
                  {
                     matriple[i] = iMAOnArray(tempbuffer,0,MA_Period,0,MODE_EMA,i);
                  }
                  for(i=0; i<limit; i++)
                  {
                     buffer[i] = iMAOnArray(matriple,0,MA_Period,0,MODE_EMA,i);
                  }
            }
            break;
      
      case 5:
            {
                  for(i=0; i<limit; i++)
                  {
                     tempbuffer[i] = iMA(NULL,0,MA_Period,0,MODE_EMA,MA_Applied,i);
                  }
                  for(i=0; i<limit; i++)
                  {
                     buffer[i] = iMAOnArray(tempbuffer,0,MA_Period,0,MODE_EMA,i);
                  }
            }
            break;
      
      case 6:
            {
                  for(i=0; i<limit; i++)
                  {
                     buffer[i] = iCustom(NULL,0,"T3MA",MA_Period,T3MA_VolumeFactor,0,i);
                  }
            }
            break;
      case 7:
            {
                  for(i=0; i<limit; i++)
                  {
                     buffer[i] = iCustom(NULL,0,"JMA",MA_Period,JMA_Phase,0,i);
                  }
            }
            break;
   }

   for(int shift=0; shift<limit; shift++)
   {
       UpBuffer[shift] = buffer[shift];
       DownBuffer[shift] = buffer[shift];
       Buffer3[shift] = buffer[shift];
   }                   
   

   
   for(shift=0; shift<limit; shift++)
   {
      double dMA = 0;
      for(int k = shift+1; k <= shift+Step_Period; k++){
         dMA += buffer[k];
      }
      dMA = dMA / Step_Period;

      if (buffer[shift] < dMA)
      {
         UpBuffer[shift] = EMPTY_VALUE;
      }
      else if (buffer[shift]>dMA)
      {
         DownBuffer[shift] = EMPTY_VALUE;
      } 
      else
      {
         UpBuffer[shift] = EMPTY_VALUE;
         DownBuffer[shift] = EMPTY_VALUE;
      }
   }
   for(shift=0; shift<limit; shift++)
   {
         signal[shift]=0;
         if(UpBuffer[shift+1] == EMPTY_VALUE &&  UpBuffer[shift] != EMPTY_VALUE && Buffer3[shift+1] != UpBuffer[shift] )
            {
               DrawObject(1,shift,buffer[shift] - (10*Point));
               signal[shift]=1;
            }
            
         if(DownBuffer[shift+1] == EMPTY_VALUE &&  DownBuffer[shift] != EMPTY_VALUE && Buffer3[shift+1] != DownBuffer[shift])
           {
               DrawObject(2,shift,buffer[shift] + (15*Point));
               signal[shift]=-1;
           }
   } 
                     
   if(UpBuffer[1] == EMPTY_VALUE &&  UpBuffer[0] != EMPTY_VALUE && Buffer3[1] != UpBuffer[0])
      return(1);// AlertOnce(Symbol()+ ":" + PeriodToText() + "  -  Up Signal",1);
   if(DownBuffer[1] == EMPTY_VALUE &&  DownBuffer[0] != EMPTY_VALUE && Buffer3[1] != DownBuffer[0])   
      return(-1);//AlertOnce(Symbol()+ ":" + PeriodToText() + "  -  Down Signal",2);
}
//==============================================================================================//
void DrawObject(int direction, int bar , double price)
{
   static int count = 0;
   count++;
   string Obj = "";
   if (direction==1) //up arrow
   {
      Obj = "xpMA_up_" + DoubleToStr(count,0);
      ObjectCreate(Obj,OBJ_ARROW,0,Time[bar],price);
      ObjectSet(Obj,OBJPROP_COLOR,UpArrowColor);
      ObjectSet(Obj,OBJPROP_ARROWCODE,UpArrowCode);
      ObjectSet(Obj,OBJPROP_WIDTH,DownArrowSize);
   }
   if (direction==2) //down arrow
   {
      Obj = "xpMA_down_" + DoubleToStr(count,0);
      ObjectCreate(Obj,OBJ_ARROW,0,Time[bar],price);
      ObjectSet(Obj,OBJPROP_COLOR,DownArrowColor);
      ObjectSet(Obj,OBJPROP_ARROWCODE,DownArrowCode);
      ObjectSet(Obj,OBJPROP_WIDTH,DownArrowSize);
   }
   ObjectsRedraw();
}
//==============================================================================================//
 
  • Автор темы
  • Панель управления
  • #8
Admin

Admin

Команда форума
Администратор
Регистрация
03.01.2013
Сообщения
2 226
Реакции
518
Код:
   if(UpBuffer[1] == EMPTY_VALUE &&  UpBuffer[0] != EMPTY_VALUE && Buffer3[1] != UpBuffer[0])
      return(1);// AlertOnce(Symbol()+ ":" + PeriodToText() + "  -  Up Signal",1);
   if(DownBuffer[1] == EMPTY_VALUE &&  DownBuffer[0] != EMPTY_VALUE && Buffer3[1] != DownBuffer[0])   
      return(-1);//AlertOnce(Symbol()+ ":" + PeriodToText() + "  -  Down Signal",2);
то что Вы сделали через массив уже делается внутри советника , return (); Возвращает Вам для баев 1 для селов -1
Вам уже индикатор не нужен , его код перенесен в советник и будет работать как одно целое.
 

Вложения

S

sanya32

Участник
Регистрация
28.01.2013
Сообщения
11
Реакции
0
не понял ты поправил Moy.mq4?
или мне код копировать?
 
  • Автор темы
  • Панель управления
  • #10
Admin

Admin

Команда форума
Администратор
Регистрация
03.01.2013
Сообщения
2 226
Реакции
518
  • Like
Реакции: tak
  • Автор темы
  • Панель управления
  • #11
Admin

Admin

Команда форума
Администратор
Регистрация
03.01.2013
Сообщения
2 226
Реакции
518
В вашем случае если я все правильно понял будет так

if ((isNewBar())&& (OrdersTotal()==0) &&(AccountBalance()>10))// тут немного не правильно
{
//level=iCustom(NULL, 0,"xpMA",7,7,0);
// Alert("level= ", level," такой");//
if (xMA() == 1)
{//есть сигнал на покупку и он же сгнал для закрытия селл ордера
Alert("level= ", xMA()," такой");
//price=NormalizeDouble(Ask,Digits);
//stop=NormalizeDouble(price-StopLoss*Point,Digits);
//profit=NormalizeDouble(price+TakeProfit*Point,Digits);
//OrderSend(Symbol(),OP_BUY,Lots,price,3,stop,profit,NULL,0,0,Green);
//Print(AccountBalance());
}
if (xMA() == -1 )
{//есть сигнал на продажу и он же сгнал для закрытия бай ордера
Alert("level= ", xMA()," такой");
//price=NormalizeDouble(Ask,Digits);
//stop=NormalizeDouble(price+StopLoss*Point,Digits);
//profit=NormalizeDouble(price-TakeProfit*Point,Digits);
//OrderSend(Symbol(),OP_SELL,Lots,price,3,stop,profit,NULL,0,0,Green);
////Print(AccountBalance());
}
}
 
S

sanya32

Участник
Регистрация
28.01.2013
Сообщения
11
Реакции
0
что то в тестере на М15 за период с 23.01 по сегодня только 23.01 в 00:00 купил и все, хотя на графике 23.01 две стрелки вверх одна и одна вниз(и они не в 00:00), да и 24.01 и 25.01 есть сигналы. Что то не так работает.
 
Теги mql help mql помощь mql программирование mql функции вопросы по программирования мкл вопросы по форекс мкл код мкл помощь
Верх