[ARCHIVE] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 3. - 페이지 606

 
Roman. : 얘들 아, 말해봐 - 나는 DC 사이트에서 터미널 설정을 다운로드했습니다. F2 키를 누를 때 테스터에서이 특정 DC의 따옴표에서 전략 테스터의 올빼미를 정확히 테스트하고 싶습니다. 도구의 따옴표를 다운로드하면 던집니다. 그런 창 밖으로 ... 선택한 DC에서 견적을 다운로드 할 수 있다면?
로만 , 내가 조언할 수 있는 것은 DC 웹사이트에서 그들의 역사를 찾는 것뿐입니다.
 

안녕하세요. 내 .dll을 스크립트에 연결하고 싶습니다. 이 예제를 테스트하려고 했습니다.

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

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

작동하면 창이 나타납니다. 내 dll을 작성했습니다.

 #ifndef DLLTEST_H
#define DLLTEST_H

#pragma once

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

#endif // DLLTEST_H

플러스에 대한 일반 프로그램에 대한 연결을 통해 확인했는데 모든 것이 작동하고 모든 것이 정상입니다. 그러나 스크립트에 연결하려고 할 때 아무 일도 일어나지 않고 dll에 연결할 것인지 묻지도 않습니다. 분명히, 그것은 그러한 수출을 이해하지 못합니다. 글쎄요, 질문은 다음과 같습니다. 어떤 종류의 수출을 이해합니까? Visual C++에서? 아니면 제가 뭔가 잘못해서 탬버린을 가지고 특별한 수출이 필요한가요?

 
안녕하세요! 이 버전의 스토캐스틱에서는 플랫 라인의 구성을 추가하기로 결정했습니다(차트에서)
과매수/과매도 구역.

기록에서 "이전" 줄을 삭제하는 데 문제가 있었습니다. 무엇이 잘못되었으며 무엇에주의를 기울여야합니까?

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

아래 예에서는 작동했습니다. 하지만 그렇지 않습니다. 상단 라인은 새로운 라인과 함께 제거되고 하단 라인은 즉시 제거됩니다. 무엇 때문에?

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

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

이것은 추가 질문을 제기합니다. 추가 하지 않고 기능이 작동하지 않는 이유는

OBJ_TREND , 제 생각에는 이 경우에 근본적인 변화를 가져오지 않습니까?

다음으로, 메인 코드의 라인명에 대한 몇 가지 실험이 있었습니다.

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

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])이 지정되었습니다.


문제. 두 번째 옵션이 작동하지 않는 것으로 판명된 이유 (즉,

두 번째 변형에 적용된 dellline()은 이름이 할당된 행을 제거하지 않았습니다.

변수 up_line 및 down_line?

그리고 이전 게시물의 마지막 질문 을 복제하겠습니다. 화면에 있습니다. 그것에 대한 답을 찾으십시오

할 수 없었다.

고맙습니다!

 
rustein :

감사합니다, 나는 조건으로 시도했습니다:

여전히 오류가 발생합니다

이렇게 시도

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



 
yosuf :
알려주십시오. 주어진 시간에 열린 위치의 수를 표시하는 표시기가 있습니까? 그 중 몇 개가 BUY이고 몇 개인지 CELL인지 표시하면 더욱 좋습니다.
있다.
파일:
iexposure4.mq4  11 kb
 
Solree :

안녕하세요. 내 .dll을 스크립트에 연결하고 싶습니다. 이 예제를 테스트하려고 했습니다.

작동하면 창이 나타납니다. 내 dll을 작성했습니다.

플러스에 대한 일반 프로그램에 대한 연결을 통해 확인했는데 모든 것이 작동하고 모든 것이 정상입니다. 그러나 스크립트에 연결하려고 할 때 아무 일도 일어나지 않고 dll에 연결할 것인지 묻지도 않습니다. 분명히, 그것은 그러한 수출을 이해하지 못합니다. 글쎄요, 질문은 다음과 같습니다. 어떤 종류의 수출을 이해합니까? Visual C++에서? 아니면 제가 뭔가 잘못해서 탬버린을 가지고 특별한 수출이 필요한가요?

MT4 폴더에는 MQL4의 모든 경우에 대한 C++ 코드의 예가 포함되어 있습니다. 해당 코드를 컴파일하고 거기에 붙여넣습니다. 당신은 당신과 예 사이의 차이점을 즉시 발견할 것입니다.

 
고문의 행동을 파일에 기록하고 싶습니다
MQL 편집기에 대한 참조에서 예제를 가져와 약간 수정했습니다.
 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 );
  }


결과적으로 OrdersReport.csv 파일은 비어 있지만 주문이 열려 있습니다.
 
griha :
고문의 행동을 파일에 기록하고 싶습니다
MQL 편집기에 대한 참조에서 예제를 가져와 약간 수정했습니다.


결과적으로 OrdersReport.csv 파일은 비어 있지만 주문이 열려 있습니다.

다음과 같이 시도하십시오.

 //+------------------------------------------------------------------+
//|                                                      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 :
안녕하세요! 이 버전의 스토캐스틱에서는 플랫 라인의 구성을 추가하기로 결정했습니다(차트에서)

할 수 없었다.

고맙습니다!

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

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);
     }
   }
//+------------------------------------------------------------------+
이름 = time1+price1+time2로 추세선을 생성하고 초기에 쉽게 삭제할 수 있습니다.
 
Mathemat :
로만 , 내가 조언할 수 있는 것은 DC 웹사이트에서 그들의 역사를 찾는 것뿐입니다.
그리고 그는 그렇게 했습니다. 이미 고객 지원에서 그들에게 썼습니다. Mathemat 감사합니다 .