Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1153

 
kalmyk87:

приветствую! в программе metatrader4 не проходит авторизацию mql5 чтоб подписаться на сигналы...что делать подскажите!


Писать заявку в сервисдеск (в профиле слева), с подробностями и скриншотами.

 

нужно чтобы сов пахал на несколько пар и желательно по  2 совы на график бай одельно от сел.

а так как есть открывает до бесконечьности


int _OrdersTotal=OrdersTotal();

   for (int i=_OrdersTotal-1; i>=0; i--) {

      if (OrderSelect(i,SELECT_BY_POS)) {

         if (OrderMagicNumber() == Magic) {                                       

            if (OrderSymbol() == Symbol()) {

               if (OrderType() == OP_BUY) {

          }}}}}

   if(MaPrevious>MaPrevious1) //условее для откритие

        {

         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point ,Ask+TakeProfit*Point,"macd sample",Magic,0,Green);

         if(ticket>0)

           {

            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))

               Print("BUY order opened : ",OrderOpenPrice());

           }

         else

            Print("Error opening BUY order : ",GetLastError());

         return;

        }

 

помогите кто может

 

Добрый день всем!

 

Знаю, что в индикаторе можно реализовать вывод сигнала:

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

б). после закрытия бара, на котором появился сигнал.

 

Меня интересует вариант а). Как реализовать вывод алерта в индикаторе, не дожидаясь закрытия бара?

Попытался его оформить в виде выбора параметра в строке 39 кода индикатора, но не получилось. Как правильно сделать?


extern int shift = 0;      // На каком баре считать сигнал: 0 - на текущем; 1 - на закрытом


Буду очень признателен за помощь!

Файлы:
 
Tornado:

Добрый день всем!

 

Знаю, что в индикаторе можно реализовать вывод сигнала:

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

б). после закрытия бара, на котором появился сигнал.

 

Меня интересует вариант а). Как реализовать вывод алерта в индикаторе, не дожидаясь закрытия бара?

Попытался его оформить в виде выбора параметра в строке 39 кода индикатора, но не получилось. Как правильно сделать?


extern int shift = 0;      // На каком баре считать сигнал: 0 - на текущем; 1 - на закрытом


Буду очень признателен за помощь!


У меня примерно так получилось

//+---------------------------------------------------------------------------------+
//+ MA2_Signal                                                                      +
//+ Индикатор сигналов при пересечении 2-х средних                                  +
//+                                                                                 +
//+ Внешние параметры:                                                              +
//+  ExtPeriodFastMA - период быстой средней                                        +
//+  ExtPeriodSlowMA - период медленной средней                                     +
//+  ExtModeFastMA   - режим быстой средней                                         +
//+  ExtModeSlowMA   - режим медленной средней                                      +
//+   Режимы: 0 = SMA, 1 = EMA, 2 = SMMA (сглаженная), 3 = LWMA (взвешенная)        +
//+  ExtPriceFastMA  - цена быстрой средней                                          +
//+  ExtPriceSlowMA  - цена медленной средней                                       +
//+   Цены: 0 = Close, 1 = Open, 2 = High, 3 = Low, 4 = HL/2, 5 = HLC/3, 6 = HLCC/4 +
//+---------------------------------------------------------------------------------+
#property copyright "Copyright © 2015, Karakurt (mod. GromoZeka 2017)"
#property link      ""

//---- Определение индикаторов
#property indicator_chart_window
#property indicator_buffers 4
//---- Цвета
#property indicator_color1 Red // 5
#property indicator_color2 Green        // 7
#property indicator_color3 DeepSkyBlue
#property indicator_color4 Magenta
#property indicator_width1 2
#property indicator_width2 2
#property indicator_width3 2
#property indicator_width4 2


//---- Параметры
extern int    ExtPeriodFastMA = 8;
extern int    ExtPeriodSlowMA = 20;
extern int    ExtModeFastMA   = 1; // 0 = SMA, 1 = EMA, 2 = SMMA, 3 = LWMA
extern int    ExtModeSlowMA   = 1; // 0 = SMA, 1 = EMA, 2 = SMMA, 3 = LWMA
extern int    ExtPriceFastMA  = 0; // 0 = Close, 1 = Open, 2 = High, 3 = Low, 4 = HL/2, 5 = HLC/3, 6 = HLCC/4
extern int    ExtPriceSlowMA  = 0; // 0 = Close, 1 = Open, 2 = High, 3 = Low, 4 = HL/2, 5 = HLC/3, 6 = HLCC/4
extern int shift=0;      // На каком баре считать сигнал: 0 - на текущем; 1 - на закрытом
extern bool   EnableAlert=true;
extern bool   EnableSendNotification=false;
extern bool   EnableSendMail  =  false;
extern bool   EnableSound     = false;
extern string ExtSoundFileNameUp = "Покупаем.wav";
extern string ExtSoundFileNameDn = "Продаем.wav";

//---- Буферы
double FastMA[];
double SlowMA[];
double CrossUp[];
double CrossDown[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- Установка параметров прорисовки
//     Средние
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
//     Сигналы
   SetIndexStyle(2,DRAW_ARROW,EMPTY);
   SetIndexArrow(2,233);
   SetIndexStyle(3,DRAW_ARROW,EMPTY);
   SetIndexArrow(3,234);

//---- Задание буферов
   SetIndexBuffer(0,FastMA);
   SetIndexBuffer(1,SlowMA);
   SetIndexBuffer(2,CrossUp);
   SetIndexBuffer(3,CrossDown);

   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));

//---- Название и метки
   IndicatorShortName("MA2_SignalV2("+ExtPeriodFastMA+","+ExtPeriodSlowMA);
   SetIndexLabel(0,"MA("+ExtPeriodFastMA+","+ExtPeriodSlowMA+")"+ExtPeriodFastMA);
   SetIndexLabel(1,"MA("+ExtPeriodFastMA+","+ExtPeriodSlowMA+")"+ExtPeriodSlowMA);
   SetIndexLabel(2,"Buy");
   SetIndexLabel(3,"Sell");

   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   double AvgRange;
   int    iLimit;
   int    i;
   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--;

   iLimit=Bars-counted_bars;

   for(i=iLimit; i>=0; i--)
     {
      FastMA[i] = iMA( NULL, 0, ExtPeriodFastMA, 0, ExtModeFastMA, ExtPriceFastMA, i );
      SlowMA[i] = iMA( NULL, 0, ExtPeriodSlowMA, 0, ExtModeSlowMA, ExtPriceSlowMA, i );
      AvgRange=(iMA(NULL,0,10,0,MODE_SMA,PRICE_HIGH,i)-iMA(NULL,0,10,0,MODE_SMA,PRICE_LOW,i))*0.1;
      CrossDown[i+1]=EMPTY_VALUE;
      CrossUp[i+1]=EMPTY_VALUE;

      if((FastMA[i+1]>=SlowMA[i+1]) && (FastMA[i+2]<=SlowMA[i+2]) && (FastMA[i]>SlowMA[i])) // пересечение вверх
        {//
         CrossUp[i+1]=SlowMA[i+1]-Range*0.75;
        }

      if((FastMA[i+1]<=SlowMA[i+1]) && (FastMA[i+2]>=SlowMA[i+2]) && (FastMA[i]<SlowMA[i])) // пересечение вниз
        {//
         CrossDown[i+1]=SlowMA[i+1]+Range*0.75;
        }
     }
   static datetime TimeAlert=0;
   if(TimeAlert!=Time[0])
     {
      TimeAlert=Time[0];
      if(CrossUp[shift]!=EMPTY_VALUE)
        {
         if(EnableAlert) Alert("MA 8-20 ",Symbol()," ",Period(),"M - BUY "); // звуковой сигнал
         if(EnableSound) PlaySound(ExtSoundFileNameUp);
         if(EnableSendNotification) SendNotification("MA 8-20 EUR_H1 - BUY"); // push-уведомление
         if(EnableSendMail) SendMail("MA 8-20: ",Symbol()+" , "+Period()+" мин.-  BUY!"); // email-уведомление
        }
      if(CrossDown[shift]!=EMPTY_VALUE)
        {
         if(EnableAlert) Alert("MA 8-20 ",Symbol()," ",Period(),"M - SELL "); // звуковой сигнал
         if(EnableSound) PlaySound(ExtSoundFileNameDn);
         if(EnableSendNotification) SendNotification("MA 8-20 EUR_H1 - SELL"); // push-уведомление
         if(EnableSendMail) SendMail("MA 8-20: ",Symbol()+" , "+Period()+" мин.- SELL!"); // email-уведомление
        }
     }
   return (0);
  }
//+------------------------------------------------------------------+

Кое-что лишнее убрал. Что-то упростил

 
Victor Nikolaev:

У меня примерно так получилось

Кое-что лишнее убрал. Что-то упростил


Спасибо большое! Попробую.

 
Victor Nikolaev:

У меня примерно так получилось

Кое-что лишнее убрал. Что-то упростил


Прискорбно, но не работает. Пробовал на таймфреме М5, чтоб быстрее проверить. Сигнал появился только после закрытия бара, а не при пересечении средних на текущем баре. Тестирую на больших фреймах.

 
//+------------------------------------------------------------------+
class A
  {
public: int       propA;
public:
                     A(void) {propA = 15;};
                    ~A(void) {};
  };
//+------------------------------------------------------------------+
class B: public A
  {
public:
                     B(void){};
                    ~B(void){};
  };
//+------------------------------------------------------------------+
void OnStart()
  {
   B newObj;
   GetA(newObj);
//---
   //B newObjArray[3];
   //GetA_Array(newObjArray);
  }
//+------------------------------------------------------------------+
void GetA(A &obj)
  {
   Print(obj.propA);
  }
//+------------------------------------------------------------------+
void GetA_Array(A &obj[])
  {
   for(int i=0;i<ArraySize(obj);i++)
      Print(obj[i].propA);
  }
//+------------------------------------------------------------------+

Если раскомментировать оставшиеся строки в OnStart() получим "newObjArray - parameter conversion not allowed".

2 вопроса: почему, и как исправить?

 
Tornado:

Прискорбно, но не работает. Пробовал на таймфреме М5, чтоб быстрее проверить. Сигнал появился только после закрытия бара, а не при пересечении средних на текущем баре. Тестирую на больших фреймах.


Похоже просто мы друг друг друга не понимаем. 

 

Привет, друзья.

Как сделать, чтобы значения стоплоса, текпрофита и трейлинга выдавалось не в пунктах, а процентах. 

Вот такая формула сильно загромождает и совсем не работает

StopLoss=NormalizeDouble(Bid-(Bid-TrailingStop)/100*TRAL_PERCENT,Digits);

Хотелось бы простейший вид процента.

Double Stoploss = 0.05;

--------

Profit=Bid-Stoploss в процентах (пример корявый, но так для понимания)

Спасибо. 

Причина обращения: