[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 605

 
Ich habe bereits gefragt, aber noch keine Antwort erhalten. Hat jemand einen Range-Bar-Chart-Indikator mit Akkumulation, d.h. der unidirektionale Balken kombiniert? Es sieht so aus:
 

Guys, bitte beraten - ich heruntergeladen das Terminal-Setup von Brokerage-Unternehmen Website, ich möchte die Eulen mit Zitaten von diesem bestimmten Brokerage-Unternehmen in der Strategie-Tester zu testen, aber wenn ich F2 drücken und downloaden Zitate, der Tester zeigt dieses Fenster ... Ist es möglich, Angebote von dem ausgewählten Maklerunternehmen herunterzuladen?


 
Helfen Sie mir, den Fehler der Nullteilung im EA zu beseitigen.

Ich danke Ihnen im Voraus.

double BullSumm()
{
  double MySummBull=0;
  for(int Cnt=0;Cnt<OrdersTotal();Cnt++)
  { 
    OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES);
    if(OrderType()==OP_BUY)
    {
      MySummBull+=OrderOpenPrice()*OrderLots();
    }
  }
  return(MySummBull);
}
//--------------------------------------
double SummBullLots()
{
  double MySummBullLots=0;
  for(int Cnt=0;Cnt<OrdersTotal();Cnt++)
  { 
    OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES);
    if(OrderType()==OP_BUY)
    {
      MySummBullLots+=OrderLots();
    }
  }
  return(MySummBullLots);
}
//---------------------------------------
..............
..............
  double BullAveragePrice = NormalizeDouble(BullSummOpenPrice()/SummBullLots(),Digits);
...............
...............

 
charter:
Gerade als Sie die Daten in Ihr jetzt stillgelegtes Terminal hochgeladen haben.
Und ich weiß nicht mehr, wie die Geschichte damals heruntergeladen wurde, bitte verzeihen Sie mir.
 
rustein:
Helfen Sie mir, den Fehler der Nullteilung im EA zu beseitigen.

Ich danke Ihnen im Voraus.

Ein Sonderfall dieses Codes ist das Fehlen von Kaufaufträgen. Deshalb wird sie durch Null geteilt.
 
Zhunko:
Ein Sonderfall des Codes ist, dass es keine Kaufaufträge gibt. Deshalb wird sie durch Null geteilt.

Danke, ich habe es mit der Bedingung versucht:

int TotalBullOrders()
{
  int TotalBullOrders = 0;
  for(int Cnt=0;Cnt<OrdersTotal();Cnt++)
  { 
    OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES);
    if(OrderMagicNumber()==Magic && OrderType()==OP_BUY)
    {
      TotalBullOrders++;
    }
  }
  return(TotalBullOrders);
} 
 if(TotalBullOrders()>0){double BullAveragePrice = NormalizeDouble(BullSummOpenPrice()/SummBullLots(),Digits);}

gibt es immer noch eine Fehlermeldung.

 
rustein:

Danke, ich habe es mit der Bedingung versucht:

Ich erhalte immer noch eine Fehlermeldung.

Welchen Unterschied macht das? Wenn es nicht in das Innere der Bedingung geht, wird Null ausgegeben. Das ist es, durch das es geteilt wird.
 
Zhunko:
Welchen Unterschied macht das? Wenn es nicht in das Innere der Bedingung eingeht, ist es am Ausgang Null. Das ist es, durch das es geteilt wird.
Ja, ich verstehe, vielen Dank.

Sagen wir es so, ich kenne keinen anderen Weg.......)

//--------------------------------------
double SummBullLots()
{
  double MySummBullLots=0.000000000000000000000000000000001;
  for(int Cnt=0;Cnt<OrdersTotal();Cnt++)
  { 
    OrderSelect(Cnt,SELECT_BY_POS,MODE_TRADES);
    if(OrderType()==OP_BUY)
    {
      MySummBullLots+=OrderLots();
    }
  }
  return(MySummBullLots);
}
//---------------------------------------
..............
..............
  double BullAveragePrice = NormalizeDouble(BullSummOpenPrice()/SummBullLots(),Digits);
...............
...............

 
Guten Tag, in dieser Version von Stochastic habe ich beschlossen, flache Linien hinzuzufügen (auf dem Chart)
auf die überkauften/überverkauften Zonen.

Es gab ein Problem mit dem Löschen von "alten" Zeilen aus der Historie. Was ist falsch und worauf muss ich achten?

//+------------------------------------------------------------------+
//|                                              Stochastic_flat     |
//|                                         Copyright © 2012 Fox.RM  |
//|                                               fox.rm@mail.ru     |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2012 Fox.RM"
#property link      "fox.rm@mail.ru"

//----
#property indicator_separate_window
#property indicator_buffers 4

//---- fan style
#property indicator_color1 Red
#property indicator_color2 Black
#property indicator_color3 Blue
#property indicator_color4 DarkGray

#property indicator_style1 0
#property indicator_style2 0
#property indicator_style3 0
#property indicator_style4 0
#property indicator_width4 2
#property indicator_level1 88.2
#property indicator_level2 11.8
 
#property indicator_levelcolor DarkGray
#property indicator_levelstyle 0

//---- basic fan indicator parameters
extern bool Show_STOCH_1=true;
extern int K_period1=13;
extern int S_period1=1;
extern bool Show_STOCH_2=true;
extern int K_period2=34;
extern int S_period2=1;
extern bool Show_STOCH_3=true;
extern int K_period3=89;
extern int S_period3=1;
extern bool Show_STOCH_4=true;
extern int K_period4=233;
extern int S_period4=1;
extern int delete=2;

//---- indicator buffers
double MainBuffer1[];
double MainBuffer2[];
double MainBuffer3[];
double MainBuffer4[];


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

int init()
  {
//---- stochastic line 1 (fast)
   if(Show_STOCH_1 ==true){Show_STOCH_1=DRAW_LINE; }
   else 
    {Show_STOCH_1=DRAW_NONE; }
   SetIndexBuffer(0,MainBuffer1);
   SetIndexStyle(0,Show_STOCH_1,0);
   SetIndexLabel(0,"fast WPR  ( "+K_period1+" )");
   
//---- stochastic line 2 (basic)
   if(Show_STOCH_2 ==true){Show_STOCH_2=DRAW_LINE; }
   else 
    {Show_STOCH_2=DRAW_NONE; }
   SetIndexBuffer(1,MainBuffer2);
   SetIndexStyle(1,Show_STOCH_2);
   SetIndexLabel(1,"basic WPR ( "+K_period2+" )");
   
//---- stochastic line 3 (flat)
   if(Show_STOCH_3 ==true){Show_STOCH_3=DRAW_LINE; }
   else 
    {Show_STOCH_3=DRAW_NONE; }
   SetIndexBuffer(2,MainBuffer3);
   SetIndexStyle(2,Show_STOCH_3,0);
   SetIndexLabel(2,"slow WPR ( "+K_period3+" )");
   
//---- stochastic line 4 (control)
   if(Show_STOCH_4 ==true){Show_STOCH_4=DRAW_LINE; }
   else
    {Show_STOCH_4=DRAW_NONE; }
   SetIndexBuffer(3,MainBuffer4);
   SetIndexStyle(3,Show_STOCH_4,0,2);
   SetIndexLabel(3,"control WPR ( "+K_period4+" )");

   
//---- name for DataWindow and indicator subwindow label   
   IndicatorShortName("Stochastic_flat");
  }

//----
   return(0);

//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+

int deinit()
  {
//---- 
   ObjectsDeleteAll();
//----
   return(0);
  }

//+------------------------------------------------------------------+
//| Stochastic_fan                                                   |
//+------------------------------------------------------------------+

int start()
  {
   int    i,shift,limit,y=0,counted_bars=IndicatorCounted();
   double x1,x2;
   datetime y1,y11,y2,y22;
//---- Plot defined timeframe on to current timeframe   
 
   limit=Bars-counted_bars;
   //---stroim stohastik
   for(i=0,y=0;i<limit;i++,y++)
     {
      MainBuffer1[i]=iStochastic(NULL,0,K_period1,1,S_period1,0,0,MODE_MAIN,y);
      MainBuffer2[i]=iStochastic(NULL,0,K_period2,1,S_period2,0,0,MODE_MAIN,y);
      MainBuffer3[i]=iStochastic(NULL,0,K_period3,1,S_period3,0,0,MODE_MAIN,y);
      MainBuffer4[i]=iStochastic(NULL,0,K_period4,1,S_period4,0,0,MODE_MAIN,y);
    
     //---flat zona
  
     
     if (MainBuffer1[i] < 11.8) //---pervoe uslovie
     {
     x1=Low[i];
     y1=Time[i]; //--- opredelyaem koordinaty dlya x1,y1
     }
     if (MainBuffer1[i] > 88.2) //---vtoroe uslovie
     {
     x2=High[i];
     y2=Time[i];   //--- opredelyaem koordinaty dlya x2,y2
     }
     }
    for(i=Bars; i>0; i--)
    {
     //--- opredelyaem koordinaty dlya x11,y11 
     if (Low[i]<x1)
     {
     y11=Time[i];
     }
     //--- opredelyaem koordinaty dlya x22,y22
     if (High[i]>x2)
     {
     y22=Time[i];
     }
     }    
     
   
   string up_line = "upline";
  string down_line = "downline";
     flatlineup(up_line+TimeToStr(Time[i]), y2,x2,y22,x2,Red,1);
     flatlinedown(down_line+TimeToStr(Time[i]), y1,x1,y11,x1,Blue,1);
  
    
   dellline(up_line,i);
     
     //----
     
   return(0);
  }
//+------------------------------------------------------------------+
void flatlineup(string labebe,datetime time1,double price1,datetime time2,double price2,color colir, int W)
  {
     ObjectCreate(labebe, OBJ_TREND, 0,time1,price1,time2,price2);
   ObjectSet(labebe, OBJPROP_COLOR, colir);
   ObjectSet(labebe, OBJPROP_STYLE,0);
   ObjectSet(labebe, OBJPROP_RAY,0);
   ObjectSet(labebe, OBJPROP_WIDTH,W);   
   ObjectSet(labebe, OBJPROP_BACK, true);
   }
  void flatlinedown(string labebe1,datetime time1,double price1,datetime time2,double price2,color colir, int W)
  {
   ObjectCreate(labebe1, OBJ_TREND, 0,time1,price1,time2,price2);
   ObjectSet(labebe1, OBJPROP_COLOR, colir);
   ObjectSet(labebe1, OBJPROP_STYLE,0);
   ObjectSet(labebe1, OBJPROP_RAY,0);
   ObjectSet(labebe1, OBJPROP_WIDTH,W);   
   ObjectSet(labebe1, OBJPROP_BACK, true);
    }
   
void dellline(string name_line, int i)  //--- первый вариант с удалением линий
  {
    string name = ObjectName(i);
    if (StringFind(name,name_line)!=-1)ObjectDelete(name);

 // if (StringFind(name,name_line)!=-1)del1++;
 // if (del1>2)ObjectDelete(name);
   }
void dellline(string name_line)  //--- второй вариант с удалением линий  
{
string name, dellname; 
bool del = false;
for(int i=ObjectsTotal(); i>=0;i--)
    {
if (del == false){ //---при этом условии должна происходить идентификация первой линии 
name = ObjectName(i); //--выполняется при первом обращении к функции
dellname=name;
del = true;}
if (del == true){
if (StringFind(dellname,name_line)!=-1)ObjectDelete(dellname);
dellname=name;}
}   
} 
    //---Были и промежуточные варианты, которые также не дали желаемого результата.

In der folgenden Version hat es funktioniert. Aber nicht ganz. Die oberen Zeilen werden beim Erscheinen neuer Zeilen gelöscht, die unteren Zeilen werden sofort gelöscht. Warum?

//------ функция удаляющая ненужные линии

void dellline(string name_line_up, string name_line_down) 
{
string name_l;
int obj=ObjectsTotal(OBJ_TREND); // --- в этой версии интуитивно добавил свойство OBJ_TREND
for (int i=obj; i>=0; i--)
{
name_l=ObjectName(i);
if(StringFind(name_l,name_line_up)!=-1)ObjectDelete(name_l);
if(StringFind(name_l,name_line_down)!=-1)ObjectDelete(name_l);
}}

Hier stellt sich zusätzlich die Frage, warum die Funktion nicht so funktioniert, wie sie sollte, ohne den Zusatz

OBJ_TREND, weil es in diesem Fall keine grundlegenden Änderungen zu geben scheint?

Dann habe ich einige Experimente mit Zeilennamen im Hauptcode durchgeführt.

//-------------- первый вариант (рабочий)

string up_line = "upline_", down_line = "downline_";
 
     flatlineup(up_line+TimeToStr(Time[i]), y2,x2,y22,x2,Red,1);
     flatlinedown(down_line+TimeToStr(Time[i]), y1,x1,y11,x1,Blue,1);
     dellline(up_line, down_line);

//---TimeToStr(Time[i]) указывал в имени тренд лайн в теле функции

//--------------- второй вариант (нерабочий)

string up_line = "upline_"+TimeToStr(Time[i]); //--или пробовал StringConcatenate()
string down_line = "downline_"+TimeToStr(Time[i]); //--или пробовал StringConcatenate()
 
     flatlineup(up_line, y2,x2,y22,x2,Red,1);
     flatlinedown(down_line, y1,x1,y11,x1,Blue,1);
     dellline(up_line, down_line);

TimeToStr(Time[i]) wurde in einer Variablen im Hauptcode angegeben.


Frage. Warum hat die zweite Variante nicht funktioniert (d.h. die Funktion

dellline(), wenn es auf die zweite Variante angewandt wird, entfernt keine Zeilen mit Namen, die der

zu up_line und down_line Variablen?

И letzte Frage Ich kopiere es aus einem früheren Beitrag, es ist auf dem Screenshot zu sehen. Die Antwort auf diese Frage finden Sie

konnte nicht.

Ich danke Ihnen!

Dateien:
 
Können Sie mir bitte sagen, ob es einen Indikator gibt, der die Anzahl der offenen Positionen zu einem bestimmten Zeitpunkt anzeigt? Noch besser wäre es, wenn sie anzeigt, wie viele davon BAY und wie viele SELL sind.