[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 702

 
keekkenen:

static int time = Time[0];

se (tempo < Tempo[0]){

// vecchia candela

} else {

// nuova candela

tempo = Tempo[0];

}

Ci sono ora la metà delle offerte che c'erano prima
 
T-G:
Ora gli scambi sono lunghi la metà rispetto a prima

Invece di controllare la presenza di una nuova barra, basta fare una pausa tra le aperture, impostata in secondi:

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
}

Lo controllo in questo modo (in grassetto, ignora /*PauseMain*/ - è un valore casuale di ritardo in minuti - da 5 a 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;            

Spero che abbia senso...

 
Domanda - è possibile che gli oggetti grafici non siano simulati nello strategy tester nella modalità non visiva? Per esempio, stavo testando il codice che apre i trade rompendo il canale OBJ_REGRESSION - fa trading in modalità visiva, ma se lo spengo, non ci sono trade... Come condurre l'ottimizzazione in questo caso?
 
ToLik_SRGV:

Boris, piccola correzione nel codice, ho dimenticato di aggiungere un reset della posizione dell'array, quando si ritorna al lotto originale:


GRAZIE MILLE! Tutto si è risolto. Va bene e mette i lotti giusti!!!
 
Per favore ditemi cosa fare e cambiare o aggiungere al codice per impostare la larghezza della barra dell'istogramma?
 
odiseif:
Come posso cambiare o aggiungere qualcosa al codice per impostare la larghezza della barra?

nelle impostazioni dell'indicatore - tipo di linea, colore e larghezza/spessore
 
IgorM:

nelle impostazioni dell'indicatore - tipo di linea, colore e spessore/larghezza
SetIndexStyle(0, DRAW_NONE);
SetIndexStyle(1, DRAW_LINE,EMPTY);
SetIndexStyle(2, DRAW_NONE);
SetIndexStyle(3, DRAW_NONE);
SetIndexStyle(4, DRAW_NONE);
è qui ....... ma il mio strumento ha una larghezza di linea di 0 e voglio impostare la larghezza di 2 per non avere a che fare con le impostazioni ...... non so come farlo .... non sono un programmatore .... quindi aiutatemi ))))
 

Non so assolutamente nulla di programmazione. Volevo rendere il filtro CCI (https://www.forex-tsd.com/indicators-metatrader-4/3356-cci-filter.html) lo stesso per WPR, ho cambiato CCI in WPR e ho cambiato i livelli nelle condizioni di colorazione delle barre (non -100, 0, 100 come CCI, ma -60, -50 e -40, perché in MT WPR ha un range da -100 a 0, penso, giusto?) Ma per qualche motivo compila con un errore, e lo schermo mostra un indicatore monocromatico. Cosa c'è che non va? Grazie in anticipo

#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:

La memoria è inutile).

Voglio sapere che tipo di moneta, prescritto le variabili

stringa EUR="EURUSD";
stringa GBP="GBPUSD";

stringa symbl = "";

Scrivo quanto segue all'inizio:

symbl = symbl(); // ottiene il valore del simbolo

Voglio confrontare il valore ricevuto di symbl con i valori delle mie variabili, e se corrispondono, prendere una decisione.

interruttore (symbl) {

caso .......... allora non succede niente (( break;

caso ................ break;

}

Rinfrescami la memoria))

Ho capito che si può usare solo una costante di carattere, ma come faccio?


 
Infinity:

La memoria è inutile).

Voglio sapere che tipo di moneta, prescritto le variabili

stringa EUR="EURUSD";
stringa GBP="GBPUSD";

stringa symbl = "";

Scrivo quanto segue all'inizio:

symbl = symbl(); // ottiene il valore del simbolo

Voglio confrontare il valore ricevuto di symbl con i valori delle mie variabili, e se corrispondono, prendere una decisione.

interruttore (symbl) {

caso .......... allora non succede niente (( break;

caso ................ break;

}

Rinfrescati la memoria ))


Le banchine dell'interruttore dicono chiaramente che l'espressione tra parentesi, cioè symbl dovrebbe essere di tipo intero, ma tu la stai incordando...