[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 606

 
Roman.: Ragazzi, per favore consigliatemi - ho scaricato il set-up del terminale dal sito della società di brokeraggio, voglio testare i gufi con le quotazioni di questa particolare società di brokeraggio nel tester di strategia, ma quando premo F2 e scarico le quotazioni, il tester visualizza questa finestra... È possibile scaricare le quotazioni dalla società di intermediazione selezionata?
Roman, posso darti solo un consiglio: vai sul sito web della tua società di intermediazione e cerca la loro storia.
 

Buon pomeriggio. Voglio collegare la mia .dll a uno script. Ho provato a testare questo esempio:

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

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

Funziona, si apre una finestra. Ha scritto il mio dll:

#ifndef DLLTEST_H
#define DLLTEST_H

#pragma once

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

#endif // DLLTEST_H

L'ho testato attraverso le connessioni a un programma regolare sui professionisti, funziona, tutto va bene. Ma quando provo a collegarlo a uno script, non succede niente, non mi chiede nemmeno se voglio collegarmi alla mia dll. Apparentemente non capisce questa esportazione. Quindi la mia domanda è: che tipo di esportazione capisce? Da Visual C++? O forse ho fatto qualcosa di sbagliato e qualche esportazione speciale con i diamanti è necessaria?

 
In questa versione di stocastico ho deciso di aggiungere delle linee piatte (sul grafico)
sulle zone di ipercomprato/ipervenduto.

C'era un problema con la cancellazione delle linee "vecchie" dalla cronologia. Cosa c'è di sbagliato e a cosa dovrei prestare attenzione?

//+------------------------------------------------------------------+
//|                                              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;}
}   
} 
    //---Были и промежуточные варианты, которые также не дали желаемого результата.

Nella versione qui sotto, ha funzionato. Ma non del tutto. Le linee superiori vengono cancellate man mano che ne appaiono di nuove, quelle inferiori vengono cancellate immediatamente. Perché?

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

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);
}}

Qui abbiamo un'ulteriore domanda perché la funzione non ha funzionato come dovrebbe senza aggiungere

OBJ_TREND perché non sembra fare alcun cambiamento fondamentale in questo caso?

Poi ho fatto alcuni esperimenti con i nomi delle linee nel codice principale.

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

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]) è stato specificato in una variabile nel codice principale.


Domanda. Perché la seconda variante non ha funzionato (nel senso che la funzione

dellline(), quando applicato alla seconda variante, non ha rimosso le linee con nomi assegnati a

alle variabili up_line e down_line?

И ultima domanda Lo duplicherò da un post precedente, è sullo screenshot. La risposta può essere trovata

non poteva.

Grazie!

 
rustein:

Grazie, ho provato con la condizione:

Dà ancora un errore.

Prova così

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



 
yosuf:
Potreste dirmi se esiste un indicatore che mostra il numero di posizioni aperte in un dato momento? Ancora meglio, se mostra quanti di loro sono BAY e quanti sono SELL.
C'è.
File:
iexposure4.mq4  11 kb
 
Solree:

Buon pomeriggio. Voglio collegare la mia .dll a uno script. Ho provato a testare questo esempio:

Funziona, si apre una finestra. Ho scritto il mio dll:

L'ho controllato collegandomi al programma regolare su plusses, tutto funziona, tutto va bene. Ma quando provo a collegarlo a uno script, non succede niente, non mi chiede nemmeno se voglio collegarmi alla mia dll. Apparentemente non capisce questa esportazione. Quindi la mia domanda è: che tipo di esportazione capisce? Da Visual C++? O forse ho fatto qualcosa di sbagliato e qualche esportazione speciale con i diamanti è necessaria?

Nella cartella MT4 c'è un codice di esempio di C++ per tutti i casi in MQL4. Compilate quel codice e incollateci il vostro codice. Vedrete immediatamente la differenza tra il vostro e l'esempio.

 
Voglio registrare le azioni EA in un file
Ho preso un esempio dal manuale dell'editor MQL e l'ho leggermente modificato per soddisfare le mie esigenze
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);
  }


Come risultato, il file OrdersReport.csv è vuoto, anche se gli ordini sono aperti.
 
griha:
Voglio registrare le azioni di EA in un file
Ho preso un esempio dal manuale dell'editor MQL, leggermente rifatto per le mie esigenze


Come risultato, il file OrdersReport.csv è vuoto, anche se gli ordini sono aperti.

Provate in questo modo:

//+------------------------------------------------------------------+
//|                                                      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:
In questa versione di stocastico ho deciso di aggiungere la costruzione di linee piatte (sul grafico)

Non poteva.

Grazie!

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

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);
     }
   }
//+------------------------------------------------------------------+
Creare linee di tendenza con nome = time1+price1+time2, facile da cancellare in deinit.
 
Mathemat:
Roman, posso darti solo un consiglio: vai sul sito della DC e cerca la loro storia.
L'ho fatto. Ho già scritto al loro supporto clienti. Grazie, Mathemat.