Any rookie question, so as not to clutter up the forum. Professionals, don't pass by. Nowhere without you - 6. - page 1153

 

The owls should plough on several pairs and preferably two owls per buy chart separately from the selves.

As it is, it opens to infinity


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;

}

 

help who can

 

Good afternoon everyone!

I know that it is possible to implement signal output in the indicator:

a). When it appears on the current bar without waiting for it to close. In this case, after the close of the bar the signal can be canceled;

b). After the close of the bar on which the signal appears.

I am interested in variant a). How to implement the alert in an indicator, without waiting for the closure of the bar?

I tried to implement it as a choice of parameters on line 39 of the indicator code, but it did not work. How to do it correctly?


extern int shift = 0; // on which bar the signal is considered: 0 - on the current bar; 1 - on the closed bar


I would be very grateful for help!

Files:
 
Tornado:

Good afternoon everyone!

I know that it is possible to implement signal output in the indicator:

a). When it appears on the current bar without waiting for it to close. In this case, after the close of the bar the signal can be canceled;

b). After the close of the bar on which the signal appears.

I am interested in variant a). How to implement the alert in an indicator, without waiting for the closure of the bar?

I tried to implement it as a choice of parameters on line 39 of the indicator code, but it did not work. How to do it correctly?


extern int shift = 0; // on which bar the signal is considered: 0 - on the current bar; 1 - on the closed bar


I would be very grateful for your help!


I got it approximately like this

//+---------------------------------------------------------------------------------+
//+ 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);
  }
//+------------------------------------------------------------------+

I have removed some unnecessary things. I have simplified some things

 
Victor Nikolaev:

This is more or less what I got.

I removed some unnecessary things. Simplified some things.


Thank you very much. I'll give it a try.

 
Victor Nikolaev:

This is more or less what I got.

I removed some unnecessary things. Simplified some things.


It's unfortunate, but it doesn't work. I tried it on M5 timeframe to check it quicker. The signal only appeared when the bar was closed and not when the averages were crossed on the current bar. Testing on large frames.

 
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+

If we uncomment the remaining lines in OnStart() we get "newObjArray - parameter conversion not allowed".

Two questions: why, and how to fix it?

 
Tornado:

It's unfortunate, but it doesn't work. Tried it on M5 timeframe to check faster. The signal appeared only after the bar was closed and not when the averages were crossed on the current bar. I have tested it on large timeframes.


Looks like we just don't understand each other.

 

Hello friends.

How to make stop loss, tekprofit and trailing values to be shown as a percentage instead of pips.

This formula is too cluttered and does not work at all

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

I would like to have the simplest form of percentage.

Double Stoploss = 0.05;

--------

Profit=Bid-Stoploss in percents (it is a messy example, but just for clarity)

Thank you.

 
KhuKhu:

Hello friends.

How to make the stop loss, tekprofit and trailing values to be displayed as a percentage instead of pips.

This formula is too cluttered and does not work at all

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

I would like to have the simplest form of percentage.

Double Stoploss = 0.05;

--------

Profit=Bid-Stoploss in percents(it is a messy example, but just for clarity)

Thank you.

A sloppy example leads to a sloppy answer. To understand it, you need to understand what the percentage is measured from.

Reason: