[WARNUNG GESCHLOSSEN!] Alle Fragen von Neulingen, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen. - Seite 702

 
keekkenen:

static int time = Time[0];

if (time < Time[0]){

// alte Kerze

} sonst {

// neue Kerze

time = Time[0];

}

Jetzt gibt es nur noch halb so viele Angebote wie vorher
 
T-G:
Jetzt sind die Trades nur noch halb so lang wie vorher

Anstatt nach einem neuen Takt zu suchen, legen Sie einfach eine Pause zwischen den Öffnungen in Sekunden fest:

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

Ich überprüfe es auf diese Weise (in Fettdruck, ignorieren Sie /*PauseMain*/ - es ist ein zufälliger Wert der Verzögerung in Minuten - von 5 bis 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;            

Ich hoffe, es macht Sinn...

 
Frage: Ist es möglich, dass grafische Objekte im Strategietester im nicht-visuellen Modus nicht simuliert werden? Zum Beispiel testete ich Code, der Trades öffnet, indem er den Kanal OBJ_REGRESSION bricht - es handelt im visuellen Modus, aber wenn ich es ausschalte, gibt es keine Trades... Wie kann man die Optimierung in diesem Fall durchführen?
 
ToLik_SRGV:

Boris, kleine Korrektur im Code, ich habe vergessen, eine Rücksetzung der Array-Position hinzuzufügen, wenn ich zum ursprünglichen Lot zurückkehre:


ICH DANKE IHNEN SEHR! Alles hat geklappt. Geht gut und bringt die richtigen Lose!!!
 
Bitte sagen Sie mir, was ich tun muss, um die Balkenbreite des Histogramms zu ändern oder dem Code hinzuzufügen?
 
odiseif:
Wie kann ich den Code ändern oder etwas hinzufügen, um die Balkenbreite festzulegen?

in den Indikatoreinstellungen - Linientyp, Farbe und Breite/Dicke
 
IgorM:

in den Indikatoreinstellungen - Linientyp, Farbe und Dicke/Breite
SetIndexStyle(0, DRAW_NONE);
SetIndexStyle(1, DRAW_LINE,EMPTY);
SetIndexStyle(2, DRAW_NONE);
SetIndexStyle(3, DRAW_NONE);
SetIndexStyle(4, DRAW_NONE);
Es ist hier ....... aber mein Werkzeug hat eine Linienbreite von 0 und ich möchte die Breite auf 2 einstellen, damit ich mich nicht mit den Einstellungen beschäftigen muss ...... Ich weiß nicht, wie man das macht .... Ich bin kein Programmierer .... also hilf mir ))))
 

Ich habe überhaupt keine Ahnung vom Programmieren. Ich wollte CCI Filter (https://www.forex-tsd.com/indicators-metatrader-4/3356-cci-filter.html) das gleiche für WPR machen, änderte CCI zu WPR und änderte Ebenen in Färbung Bedingungen von Bars (nicht -100, 0, 100 wie CCI, aber -60, -50 und -40, weil in MT WPR hat Bereich -100 bis 0, ich denke, richtig?) Aber aus irgendeinem Grund kompiliert es mit einem Fehler, und der Bildschirm zeigt eine monochrome Anzeige. Was ist los? Vielen Dank im Voraus

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

Speicher ist nutzlos).

Ich möchte wissen, welche Art von Währung, vorgeschrieben die Variablen

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

string symbl = "";

Ich schreibe das Folgende an den Anfang:

symbl = symbl(); // Ermittelt den Wert des Symbols

Ich möchte den empfangenen Wert von symbl mit den Werten meiner Variablen vergleichen, und wenn sie übereinstimmen, dann eine Entscheidung treffen.

switch (symbl) {

case .......... dann passiert nichts (( break;

Fall ................ break;

}

Mein Gedächtnis auffrischen))

Ich habe herausgefunden, dass nur eine Zeichenkonstante verwendet werden kann, aber wie mache ich das?


 
Infinity:

Speicher ist nutzlos).

Ich möchte wissen, welche Art von Währung, vorgeschrieben die Variablen

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

string symbl = "";

Ich schreibe das Folgende an den Anfang:

symbl = symbl(); //den Wert des Symbols empfangen

Ich möchte den empfangenen Wert von symbl mit den Werten meiner Variablen vergleichen, und wenn sie übereinstimmen, dann eine Entscheidung treffen.

switch (symbl) {

case .......... dann passiert nichts (( break;

Fall ................ break;

}

Frischen Sie Ihr Gedächtnis auf ))


Die Docks auf dem Schalter besagen eindeutig, dass der Ausdruck in Klammern, d.h. symbl, vom Typ Integer sein sollte, aber Sie reihen ihn auf...