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

 
Roman.: 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?
Roman, ich kann Ihnen nur einen Rat geben: Gehen Sie auf die Website Ihres Maklerunternehmens und sehen Sie sich dessen Geschichte an.
 

Guten Tag. Ich möchte meine .dll mit einem Skript verbinden. Ich habe versucht, dieses Beispiel zu testen:

#import "user32.dll"
    int    MessageBoxA(int hWnd, string lpText, string lpCaption, int uType);
#import

int start()
{
    MessageBoxA(0, "Some", "Some", 0);
   
    return;
}

Es funktioniert, ein Fenster öffnet sich. Schrieb meine dll:

#ifndef DLLTEST_H
#define DLLTEST_H

#pragma once

extern "C" __declspec(dllexport) int __stdcall Test()
{
    return 2;
}

#endif // DLLTEST_H

Getestet durch Verbindungen zu einem regulären Programm auf den Profis, es funktioniert, alles ist in Ordnung. Aber wenn ich versuche, es mit einem Skript zu verbinden, passiert nichts, es fragt nicht einmal, ob ich eine Verbindung zu meiner DLL herstellen möchte. Offenbar versteht er diesen Export nicht. Meine Frage ist also: Welche Art von Export versteht er? Von Visual C++? Oder habe ich vielleicht etwas falsch gemacht und es ist ein spezieller Export mit Diamanten erforderlich?

 
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!

 
rustein:

Danke, ich habe es mit der Bedingung versucht:

Es wird immer noch ein Fehler angezeigt.

Probieren Sie es so

if( SummBullLots() >0){double BullAveragePrice = NormalizeDouble(BullSummOpenPrice()/SummBullLots(),Digits);}



 
yosuf:
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.
Es gibt sie.
Dateien:
iexposure4.mq4  11 kb
 
Solree:

Guten Tag. Ich möchte meine .dll mit einem Skript verbinden. Ich habe versucht, dieses Beispiel zu testen:

Es funktioniert, ein Fenster öffnet sich. Ich habe meine DLL geschrieben:

Ich habe es durch die Verbindung mit dem üblichen Programm auf plusses überprüft, alles funktioniert, alles ist gut. Aber wenn ich versuche, es mit einem Skript zu verbinden, passiert nichts, es fragt nicht einmal, ob ich eine Verbindung zu meiner DLL herstellen möchte. Offenbar versteht er diesen Export nicht. Meine Frage ist also: Welche Art von Export versteht er? Von Visual C++? Oder habe ich vielleicht etwas falsch gemacht und es ist ein spezieller Export mit Diamanten erforderlich?

Im MT4-Ordner gibt es einen Beispielcode von C++ für alle Fälle in MQL4. Kompilieren Sie diesen Code und fügen Sie Ihren eigenen Code ein. Sie werden sofort den Unterschied zwischen Ihrem und dem Beispiel sehen.

 
Ich möchte EA-Aktionen in einer Datei aufzeichnen
Ich habe ein Beispiel aus dem MQL-Editor-Handbuch genommen und es leicht modifiziert, um es meinen Bedürfnissen anzupassen
int init()  {
    int handle=FileOpen("OrdersReport.csv",FILE_WRITE|FILE_CSV,"\t");
  if(handle<0) return(0);
  // запишем заголовок в файл
  FileWrite(handle,"#","Цена открытия","Время открытия","Символ","Лоты");
   return(0);  }

int deinit()  {   return(0);  }

int start()  {
  .........................
...........................
  int handle=FileOpen("OrdersReport.csv",FILE_READ | FILE_WRITE,"\t");
  if(handle<0) return(0);
 
     // записываем в файл только открытые ордера
  for(int pos=0;pos<OrdersTotal();pos++)
    {
     if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)==false) continue;
     FileWrite(handle,OrderTicket(),OrderOpenPrice(),OrderOpenTime(),OrderSymbol(),OrderLots());
    }
     FileClose(handle);   //Закрытие файла, ранее открытого функцией FileOpen().
}
   return(0);
  }


Das Ergebnis ist, dass die Datei OrdersReport.csv leer ist, obwohl die Aufträge geöffnet sind.
 
griha:
Ich möchte die Aktionen von EA in einer Datei aufzeichnen
Ich habe ein Beispiel aus dem Handbuch des MQL-Editors genommen und es für meine eigenen Bedürfnisse leicht umgestaltet


Das Ergebnis ist, dass die Datei OrdersReport.csv leer ist, obwohl die Aufträge geöffnet sind.

Versuchen Sie es auf diese Weise:

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
int handle;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int init() 
  {
   handle=FileOpen("OrdersReport.csv",FILE_WRITE|FILE_CSV,"\t");
   if(handle<0) return(0);
// запишем заголовок в файл
   FileWrite(handle,"#","Цена открытия","Время открытия","Символ","Лоты");
   return(0);  
  }

int deinit() { 
   FileClose(handle);   //Закрытие файла, ранее открытого функцией FileOpen().
 return(0);  
 }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start() 
  {
   if(handle<0) return(0);
// записываем в файл только открытые ордера
   for(int pos=0;pos<OrdersTotal();pos++)
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) 
         FileWrite(handle,OrderTicket(),OrderOpenPrice(),OrderOpenTime(),OrderSymbol(),OrderLots());
   return(0);
  }
//+------------------------------------------------------------------+
 
Fox_RM:
Guten Tag, in dieser Version von Stochastic habe ich beschlossen, die Konstruktion von flachen Linien (auf dem Chart) hinzuzufügen

Das geht nicht.

Ich danke Ihnen!

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

void dellline(string name_line_up,string name_line_down)
  {
   string name_l;
   int obj=ObjectsTotal(); // найдем количество объектов 
   for(int i=obj-1; i>=0; i--) // obj-1 т.к. >=0 
     {
      name_l=ObjectName(i); // узнаем имя
      if(ObjectType(name_l)!=OBJ_TREND)continue; // если не трендлиния продолжим цикл * for(int i=obj-1; i>=0; i--)
      if(StringFind(name_l,name_line_up)!=-1)ObjectDelete(name_l);
      if(StringFind(name_l,name_line_down)!=-1)ObjectDelete(name_l);
     }
   }
//+------------------------------------------------------------------+
Erstellen Sie Trendlinien mit dem Namen = time1+price1+time2, einfach zu löschen in deinit.
 
Mathemat:
Roman, ich kann Ihnen nur einen Rat geben: Gehen Sie auf die DC-Website und suchen Sie nach ihrer Geschichte.
Das habe ich. Ich habe bereits an den Kundensupport geschrieben. Vielen Dank, Mathemat.