[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 702

 
keekkenen:

static int time = Time[0];

if (time < Time[0]){

// старая свеча

} else {

// новая свеча

time = Time[0];

}

Теперь сделок получается в два раза меньше чем было раньше
 
T-G:
Теперь сделок получается в два раза меньше чем было раньше

Сделайте вместо проверки нового бара просто паузу между открытиями, задаваемую в секундах:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает количество секунд после открытия последней позиций. |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
datetime SecondsAfterOpenLastPos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderOpenTime()) t=OrderOpenTime();
            }
          }
        }
      }
    }
  }
  return(TimeCurrent()-t);
}

Я проверяю так (жирным выделил, на /*PauseMain*/ внимания не обращайте - это случайная величина задержки в минутах - от 5 до 9):

// Тут начало функции открытия позиций (открытие Buy)....

// Ниже код открытия Sell:        
          PauseMain51=random(5,9)*60;
         if (!Lot()) return;               // Средств не хватает на миним.- выходим
         if (!OpnSell51 || !Trade) return;
         if (ExistPositions(NULL, OP_SELL, 51, 0))  // Если есть такой же открытый Sell
               {
                 if (SecondsAfterOpenLastPos(NULL, OP_SELL, 51)<=/*PauseMain51*/ 7*60) return; (7*60 сек = 7 минут)
                  // Если прошло мало времени - валим
               }
//---------------------- Позиции ещё нету - открываемся...-----------------------------
         divider=1;
         Lots=GetSizeLot();
         Magic=51;                                          // Задаём магик... 5 и 1; 5 = пять минут, 1 = стратегия 1
         New_Comm="Sell_M5_Стратегия_1_Основная позиция";   // Задаём комментарий для позиции
         Lots_New=NormalizeLot(Lots/divider, False, NULL);
         OpenPosition(NULL,OP_SELL,Lots_New,0,pb-tp*po,Magic,New_Comm);

         return;            

Надеюсь понятно будет...

 
Такой вопрос - получается, в тестере стратегий, в НЕвизуальном режиме графические объекты не моделируются? Например, тестировал код, открывающий сделки по пробитию канала OBJ_REGRESSION - в визуальном режиме торгует, если выключаю его - сделок нет... Как в этом случае оптимизацию проводить?
 
ToLik_SRGV:

Борис, небольшая поправка в коде, забыл добавить сброс позиции массива, при возврату к первоначальному лоту:


ОГРОМНОЕ ВАМ СПАСИБО! Все получилось. Идет нормально и лоты ставит нужные!!!
 
подскажите пожалуста что нужно сделать и изменить или что добавить в коде чтобы задать тольшину баров гистограмы ??
 
odiseif:
подскажите пожалуста что нужно сделать и изменить или что добавить в коде чтобы задать тольшину баров гистограмы ??

в настройках индикатора - тип линии, цвет и толщина/ширина
 
IgorM:

в настройках индикатора - тип линии, цвет и толщина/ширина
SetIndexStyle(0, DRAW_NONE);
SetIndexStyle(1, DRAW_LINE,EMPTY);
SetIndexStyle(2, DRAW_NONE);
SetIndexStyle(3, DRAW_NONE);
SetIndexStyle(4, DRAW_NONE);
это здесь помоему .......только у меня тольщина линии в индюке 0 а я хочу поставить тольшину 2 чтобы не мучатся каждый раз с настройками ......а как это сделать я не знаю ....я не програмист ....помогите люди добрые ))))
 

В программировании не разбираюсь вообще. Хотел сделать из CCI Filter (https://www.forex-tsd.com/indicators-metatrader-4/3356-cci-filter.html) то же самое, только для WPR, заменил в коде везде CCI на WPR, и поменял уровни в условиях раскраски баров (не -100, 0, 100, как для CCI, а -60, -50 и -40, потому как в МТ у WPR вроде бы диапазон -100 до 0, я ведь правильно соображаю?). Но почему-то компилируется с ошибкой, и на экране индюк выходит однотонным. Чего не так? Спасибо заранее

 

#property copyright "Copyright © 2006, Forex-TSD.com "
#property link      "https://www.forex-tsd.com/"

#property indicator_separate_window
#property indicator_minimum -0.05
#property indicator_maximum 1.05
#property indicator_buffers 4
#property indicator_color1 MediumBlue
#property indicator_color2 Crimson
#property indicator_color3 LightBlue
#property indicator_color4 Orange



//---- input parameters
extern int PeriodWPR=18;
//---- indicator buffers
double UpBuffer1[];
double DnBuffer1[];
double UpBuffer2[];
double DnBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
  int init()
  {
   string short_name;
//---- indicator line
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2);
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2);
   SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,2);
   SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,2);
   
   SetIndexBuffer(0,UpBuffer1);
   SetIndexBuffer(1,DnBuffer1);
   SetIndexBuffer(2,UpBuffer2);
   SetIndexBuffer(3,DnBuffer2);
   
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
//---- name for DataWindow and indicator subwindow label
   short_name="WPR Filter("+PeriodWPR+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,"UpTrend");
   SetIndexLabel(1,"DownTrend");
   SetIndexLabel(2,"Mild UpTrend");
   SetIndexLabel(3,"Mild DownTrend");
   
//----
   SetIndexDrawBegin(0,PeriodWPR);
   SetIndexDrawBegin(1,PeriodWPR);
   SetIndexDrawBegin(2,PeriodWPR);
   SetIndexDrawBegin(3,PeriodWPR);  
//----
   return(0);
  }

//+------------------------------------------------------------------+
//| WPRFilter                                                         |
//+------------------------------------------------------------------+
int start()
  {
   int shift,trend;
   double WPR0;

   
   for(shift=Bars-PeriodWPR-1;shift>=0;shift--)
   {    
   WPR0=iWPR(NULL,0,PeriodWPR,PRICE_CLOSE);
        
          if (WPR0>-50 && WPR0<-40)  trend=1;
          if (WPR0>-40)  trend=2;  
          if (WPR0<-50 && WPR0>-60) trend=-1;
          if (WPR0<-60)  trend=-2;
          
          if (trend==1) 
          {
          
          UpBuffer1[shift]=0;
          UpBuffer2[shift]=1;
          DnBuffer1[shift]=0;
          DnBuffer2[shift]=0;
          
          }
          if (trend==2) 
          {
          
          UpBuffer1[shift]=1;
          UpBuffer2[shift]=0;
          DnBuffer1[shift]=0;
          DnBuffer2[shift]=0;
          
          }
          if (trend==-1) 
          {
           
          UpBuffer1[shift]=0;
          UpBuffer2[shift]=0;
          DnBuffer1[shift]=0;
          DnBuffer2[shift]=1;
          }
          
          if (trend==-2) 
          {
          
          UpBuffer1[shift]=0;
          UpBuffer2[shift]=0;
          DnBuffer1[shift]=1;
          DnBuffer2[shift]=0; 
          
          }
        }
        return(0);      
 }
 
Infinity:

Память ни к черту) 

Хочу знать что за валюта,прописал переменные 

string EUR="EURUSD";
string GBP="GBPUSD";

string symbl = ""; 

в start  прописываю следующее :

symbl = Symbl(); //получаю значения данного символа 

хочу сравнить полученное значение  symbl со значениями моих переменных, если они совпадают, в зависимости от этого принять решение.

switch (symbl) {

case  .......... а дальше ниче не выходит ((    break;

case ................                                           break;

}

Освежите память )) 

 

Догнал,что можно использовать только символьную константу, а как тогда быть?  


 

 
Infinity:

Память ни к черту)

Хочу знать что за валюта,прописал переменные

string EUR="EURUSD";
string GBP="GBPUSD";

string symbl = "";

в start прописываю следующее :

symbl = Symbl(); //получаю значения данного символа

хочу сравнить полученное значение symbl со значениями моих переменных, если они совпадают, в зависимости от этого принять решение.

switch (symbl) {

case .......... а дальше ниче не выходит (( break;

case ................ break;

}

Освежите память ))


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