[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 198

 
ммммм.... ну лично мне кажется, что все написано правильно - только проблема в размещении отрывков кода.... вы не могли бы разместить его правильно? мне не понятно, как это сделать
 
splxgf:
Честно говоря не знаю можно ли описывать одну функцию в пределах другой, мне такого не встречалось.
Вы нас, темных, не путайте. На уровне этой ветки достаточно констатировать, что все пользовательские функции должны располагаться вне функции Старт.
 
CLAIN:
ммммм.... ну лично мне кажется, что все написано правильно - только проблема в размещении отрывков кода.... вы не могли бы разместить его правильно? мне не понятно, как это сделать

Ну размещать точно не буду, но как уже было написано все пользовательские функции за пределы start.

На уровне концепта

Start (){}

MACD{}

AnalyzeSignal(){}

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

 

Благодарю, все получилось =) только сделки не открывает, но это уже мелочи =) без вас бы не справился )

//+------------------------------------------------------------------+
//|                                                     MACD ^^^.mq4 |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

extern int TP = 100; 
extern int TS = 100;
extern double lots = 0.1;
int slip = 3;
int Magic = 1;

int total;
int ticket = 0; //объявил тотал и тикет



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


int signal = signal_MACD(); 
AnalyzeSignal(signal);




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






int signal_MACD()
{
   int MACD[8] = {0,1,2,3,4,5,6,7};
MACD[0] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,7);
MACD[1] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,6);
MACD[2] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,5);
MACD[3] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,4);
MACD[4] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,3);
MACD[5] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,2);
MACD[6] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,1);
MACD[7] = iMACD(Symbol(),1,5,34,5,PRICE_CLOSE,MODE_MAIN,0);
   total = OrdersTotal();
   if(total<1)
   {
      if(MACD[0]<0)
      {
         if(MACD[1]>0)
         {
            if(MACD[2]>0)
            {
               if(MACD[3]>0)
               {
                  if(MACD[4]>0)
                  {
                     if(MACD[5]>0)
                     {
                        if(MACD[6]>0)
                        {
                           if(MACD[7]<0)
                           {
                              return(-100);
                           }
                        }
                     }
                  }
               }
            }
         }
      }
      if(MACD[0]>0)
      {
         if(MACD[1]<0)
         {
            if(MACD[2]<0)
            {
               if(MACD[3]<0)
               {
                  if(MACD[4]<0)
                  {
                     if(MACD[5]<0)
                     {
                        if(MACD[6]<0)
                        {
                           if(MACD[7]>0)
                           {
                              return(100);
                           }
                        }
                     }
                  }
               }
            }
         }
      }
   }
}

void AnalyzeSignal(int signal)
{
   if(signal == 100)
   {
      ticket = OrderSend(Symbol(),OP_BUY,lots,Ask,slip,Bid-TS*Point,Bid+TP*Point,"покупаем",Magic,0,Green);
      if(ticket>0)
      {
         OrderSelect(ticket,SELECT_BY_TICKET);
         Print("открылись на покупку по цене:", OrderOpenPrice());
      }
      else
      {
         Print("открыться не удалось по причине:", GetLastError());
         return(0);
      }
   }
   if(signal == -100)
   {
      ticket = OrderSend(Symbol(),OP_SELL,lots,Bid,slip,Ask+TS*Point,Ask-TP*Point,"Продаем",Magic,0,Green);
      if(ticket>0)
      {
         OrderSelect(ticket,SELECT_BY_TICKET);
         Print("открылись на продажу по цене:", OrderOpenPrice());
      }
      else
      {
         Print("открыться не удалось по причине:", GetLastError());
         return(0);
      }
   }
}

 

нужен совет программиста


avatar
1
Metamql 20.09.2011 14:31
Уважаемые профи, помогите советом. Имеются две скользящие средние с периодами 5 и 60. При пересечении быстрой МА медленной снизу вверх + фильтры, открывается сделка на Buy. Проблема в следующем, как заставить сделку открываться только один раз и при ее закрытии, не открываться новой сделке, даже если есть подходящие условия для открытия, пока не произойдет обратного пересечения?
 

Здравствуйте.

Прошу помочь - ответьте, пожалуйста, на мой пост на 196 стр. (вопрос об int MAGIC;)

Заранее благодарю.

 
nemo811:

Здравствуйте.

Прошу помочь - ответьте, пожалуйста, на мой пост на 196 стр. (вопрос об int MAGIC;)

Заранее благодарю.


А функции с параметрами пробовали делать. Что бы не использовать внешние глобальные переменные (каждый по своему может назвать)
 
sergeev:

нужен совет программиста


1
Metamql 20.09.2011 14:31
Уважаемые профи, помогите советом. Имеются две скользящие средние с периодами 5 и 60. При пересечении быстрой МА медленной снизу вверх + фильтры, открывается сделка на Buy. Проблема в следующем, как заставить сделку открываться только один раз и при ее закрытии, не открываться новой сделке, даже если есть подходящие условия для открытия, пока не произойдет обратного пересечения?

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

А функции с параметрами пробовали делать. Что бы не использовать внешние глобальные переменные (каждый по своему может назвать)

Т.е. типа:

int OrdTicket_b(int MAGIC)
 {
  string SMB=Symbol();
  int OrdTicket;
  int i;
  for(i=0;i<OrdersTotal();i++)
   {
    if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)
     {
      if(OrderSymbol()==SMB)
       {
        if(OrderMagicNumber()==MAGIC || OrderMagicNumber()==777)
         {
          if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            OrdTicket=OrderTicket();
           }  
         }  
       }          
     }
   }
  return(OrdTicket);
 }

???

...и условие

    if(OrderMagicNumber()==MAGIC || OrderMagicNumber()==777)

будет отслеживаться корректно?

 
nemo811:

Т.е. типа:

???

...и условие

будет отслеживаться корректно?


int OrdTicket_b(int lMAGIC)
 {
  string SMB=Symbol();
  int OrdTicket=0;
  int i;
  for(i=0;i<OrdersTotal();i++)
   {
    if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES) == true)
     {
      if(OrderSymbol()==SMB)
       {
        if(OrderMagicNumber()==lMAGIC)
         {
          if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            OrdTicket=OrderTicket();
           }  
         }  
       }          
     }
   }
  return(OrdTicket);
 }
Типа такого, переменной OrdTicket надо присваивать какое-то значение по умолчанию. А то открытых позиций нет, а функция что-то вернет
Причина обращения: