Помощь в кодировании - страница 629

 
traderduke:

mladen & mrtools

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

input bool doBasketExit = true; // Проверка условий выхода из корзины
input double BasketTP = 250.0; // Тейк-профит корзины (валюта счета) Пара графика
input double BasketSL = -100.0; // Стоп-лосс корзины (валюта счета) График Пара

Я управляю 9 парами/графиками с агрессивным советником на H1 и хочу торговать корзиной на каждом из 9 графиков.
Вот что со мной произошло. Работают 9 графиков, 3 графика находятся в торговле с, конечно, 3 отдельными парами, каждая с 15 сделками, да 45 сделок открыто, 2 в прибыли и одна сильно проигрывает. Я ищу способ сложить каждую группу/пару из 15 отдельно и оттереть каждую группу от границ SL и TP корзины. Я нашел корзину, но, конечно, она нуждается в доработке. Хитрость заключается в том, чтобы добиться суммирования одной и той же пары из колонки Order Profit Trade. Находясь на графике с конкретной парой, я думал, что придумал пустоту, но это довольно сложно. Функция должна каким-то образом считывать OrderProfit по паре?

Смотрите мой код в качестве плохого примера;

void closeTrades( CURRENCY* &currencies[] ) {
// Проверка на выход из корзины
if ( doBasketExit ) {
double basketProfit = getBasketProfit();
if ( ( ( BasketTP > 0.0 ) && ( basketProfit > BasketTP ) ) ||
( ( BasketSL < 0.0 ) && ( basketProfit < BasketSL ) ))) {
closeAll();
}
}
double getBasketProfit() {
double basketProfit = 0.0;
for (int iOrder=OrdersTotal()-1; iOrder >= 0; iOrder--) {
if (OrderSelect(iOrder,SELECT_BY_POS,M ODE_TRADES)) {
if ((OrderMagicNumber() == MagicNumber) {
if ( (OrderType() == OP_BUY) || (OrderType() == OP_SELL) ) {
basketProfit += OrderProfit() + OrderSwap() + OrderCommission();
}
}
}
}
return(basketProfit);
}

void closeAll() {
double closePrice;
string symbolName;
int result;
for (int iOrder=OrdersTotal()-1; iOrder >= 0; iOrder--) {
if (OrderSelect(iOrder,SELECT_BY_POS,M ODE_TRADES)) {
if ((OrderMagicNumber() == MagicNumber) {
if ( (OrderType() == OP_BUY) || (OrderType() == OP_SELL) ) {
symbolName = OrderSymbol();
closePrice = ( OrderType() == OP_BUY ) ? MarketInfo( symbolName, MODE_BID ) : MarketInfo( symbolName, MODE_ASK );
result = OrderCloseReliable(OrderTicket(), OrderLots(), closePrice, 50 );
}
}



Очень признателен, если вы рассмотрите это.

Спасибо
Рэй

Рэй


Вам нужен своего рода "материнский советник" - который будет знать все магические числа, обрабатываемые другими советниками, и затем выполнять операции "на группе", которые вам нужны.

 
Господин МЛАДЕН, пожалуйста, проверьте свой почтовый ящик, сэр
 
mladen:

Попробуйте сделать следующее:

Вместо

Спасибо Младен, я немного подправил код и теперь он работает.
 
mladen:

Рэй


Вам нужен некий "материнский советник" - который будет знать все магические числа, обрабатываемые другими советниками, и затем выполнять операции "на группе", которые вам нужны.

mladen

спасибо за ваши мысли по этому вопросу. Так что НЕТ.

еще раз спасибо


Рэй

 

я пытался сделать так, чтобы стрелка появлялась после закрытия сигнальной свечи, чтобы избежать перерисовки, но все безрезультатно. пожалуйста, помогите мне MR. TOOLS и MLADEN, ниже приведен код.

//+------------------------------------------------------------------+
//|                                              signalindicator.mq4 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 4
#property  indicator_color1 Blue
#property  indicator_color2 Yellow
#property  indicator_color3 Aqua
#property  indicator_color4 Red

extern int FastEMA = 5;
extern int SlowEMA = 6;
extern int RSIPeriod = 7;
extern bool Alerts = TRUE;
double buffer_1[];
double buffer_2[];
double arrow_1[];
double arrow_2[];
int a = 0;
int b = 0;
double x = 0.0;
double y = 0.0;

int init() {
   SetIndexStyle(0, DRAW_LINE);
   SetIndexBuffer(0, buffer_1);
   SetIndexStyle(1, DRAW_LINE);
   SetIndexBuffer(1, buffer_2);
   SetIndexStyle(2, DRAW_ARROW, 0,4);
   SetIndexArrow(2, 217);
   SetIndexBuffer(2, arrow_1);
   SetIndexEmptyValue(2, 0.0);
   SetIndexStyle(3, DRAW_ARROW, 0,4);
   SetIndexArrow(3, 218);
   SetIndexBuffer(3, arrow_2);
   SetIndexEmptyValue(3, 0.0);
   return (0);
}

int deinit() {
   return (0);
}

int start() {
   int counted_bars = IndicatorCounted();
   double irsi_1 = 0;
   bool c = FALSE;
   double price_10 = 0;
   if (counted_bars < 0) return (-1);
   if (counted_bars > 0) counted_bars--;
   int li_0 = Bars - counted_bars;
   for (int i = 0; i < li_0; i++) {
      buffer_1[i] = iMA(NULL, 0, FastEMA, 0, MODE_EMA, PRICE_CLOSE, i);
      buffer_2[i] = iMA(NULL, 0, SlowEMA, 0, MODE_EMA, PRICE_CLOSE, i);
      irsi_1 = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i);
      x = buffer_1[i] - buffer_2[i];
      if (x > 0.0 && irsi_1 > 50.0) a = 1;
      else
         if (x < 0.0 && irsi_1 < 50.0) a = 2;
      if (a == 1 && b == 2) {
         arrow_2[i - 1] = High[i - 1] - 5.0 * Point;
         c= TRUE;
         price_10 = Ask;
      } else {
         if (a == 2 && b == 1) {
            arrow_1[i - 1] = Low[i - 1] - 5.0 * Point;
            c = TRUE;
            price_10 = Bid;
         }
      }
      b = a;
      y = x;
   }
   if (Alerts && c) {
      PlaySound("alert.wav");
      if (b == 2) Alert(Symbol(),"  M",Period(),"Buy at " + price_10 + "!!", "Entry Point", 0);
      else
         if (b == 1) Alert(Symbol(),"  M",Period(),"Sell at " + price_10 + "!!", "Entry Point", 0);
      c= FALSE;
   }
   return (0);
}
 
привет

Привет Младен

Мне нужен индикатор ITM X-Gen Daily Scalper Indicator.mq4

Помогите мне

Спасибо

 
alozard:

Привет, Младен

Мне нужен ITM X-Gen Daily Scalper Indicator.mq4

Помогите мне

Спасибо

alozard

Этот индикатор переименован в мой индикатор Centered TMA bands. Вы можете найти его здесь: https: //www.mql5.com/en/forum/181241

 
Г-н Младен, пожалуйста, помогите мне с версией вышеуказанных кодов.
 

Г-н Младен, пожалуйста, посмотрите на приведенные ниже коды, стрелка не появляется в реальном времени, пока я не переключу таймфрейм.


//+------------------------------------------------------------------+
//|                                              signalindicator.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 4
#property  indicator_color1 Blue
#property  indicator_color2 Yellow
#property  indicator_color3 Aqua
#property  indicator_color4 Red

#property  indicator_color4 Red

extern int FastEMA = 5;
extern int SlowEMA = 6;
extern int RSIPeriod = 7;
extern bool Alerts = TRUE;
double buffer_1[];
double buffer_2[];
double arrow_1[];
double arrow_2[];
int a = 0;
int b = 0;
double x = 0.0;
double y = 0.0;
 double alertshow;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   SetIndexStyle(0, DRAW_NONE);
   SetIndexBuffer(0, buffer_1);
   SetIndexStyle(1, DRAW_NONE);
   SetIndexBuffer(1, buffer_2);
   SetIndexStyle(2, DRAW_ARROW, 0,4);
   SetIndexArrow(2, 241);
   SetIndexBuffer(2, arrow_1);
   SetIndexEmptyValue(2, 0.0);
   SetIndexStyle(3, DRAW_ARROW, 0,4);
   SetIndexArrow(3, 242);
   SetIndexBuffer(3, arrow_2);
   SetIndexEmptyValue(3, 0.0);

   return (0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int deinit()
  {
   return (0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int counted_bars = IndicatorCounted();
   double irsi_1 = 0;
   int li_0;
   bool c = FALSE;
   double price_10 = 0;
   if (counted_bars < 0) return (-1);
   if (counted_bars > 0) counted_bars--;
   if(counted_bars==0)
      li_0=MathMin(Bars-10-1,Bars-MathMax(FastEMA,SlowEMA)-1);
   else
      li_0=Bars-counted_bars;
   for (int i = 0; i < li_0; i++) {
      buffer_1[i] = iMA(NULL, 0, FastEMA, 0, MODE_EMA, PRICE_CLOSE, i);
      buffer_2[i] = iMA(NULL, 0, SlowEMA, 0, MODE_EMA, PRICE_CLOSE, i);
      irsi_1 = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i);
      x = buffer_1[i] - buffer_2[i];
      if (x > 0.0 && irsi_1 > 50.0) a = 1;
      else
         if (x < 0.0 && irsi_1 < 50.0) a = 2;
      if (a == 1 && b == 2) {
         arrow_2[i - 1] = High[i - 1] - 5.0 * Point;
         c= TRUE;
         price_10 = Ask;
      } else {
         if (a == 2 && b == 1) {
            arrow_1[i - 1] = Low[i - 1] - 5.0 * Point;
            c = TRUE;
            price_10 = Bid;
         }
      }
      b = a;
      y = x;
   }
   if (Alerts && c) {
      PlaySound("alert.wav");
      if (b == 2)  
      
         if(alertshow<Time[1] && counted_bars!=0)
           {
            PlaySound("news.wav");// buy wav
            Alert(Symbol()," buy signal");
            alertshow=Time[1];
           }
      else
         if (b == 1) if(alertshow<Time[1] && counted_bars!=0)
           {
            PlaySound("news.wav");// buy wav
            Alert(Symbol(),"  sell signal");
            alertshow=Time[1];
           }
   }
//----
   return(prev_calculated);
  }
//+------------------------------------------------------------------+
 
kapoo:

Г-н Младен, пожалуйста, посмотрите на приведенные ниже коды, стрелка не появляется в реальном времени, пока я не переключу таймфрейм.


kapoo

Как я уже говорил вам несколько раз: этот индикатор - плохой перерисовщик, и именно поэтому он делает то, что делает. Мой лучший совет - забудьте о нем.