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

 
drknn :


여기 봤어? https://book.mql4.com/en/samples/index

일반적으로 다른 프로그램과 마찬가지로 귀하의 프로그램은 각각 특정 작업을 수행하는 별도의 블록으로 구성됩니다. 우리는 그러한 블록 하나를 가져와서 코드를 직접 작성하고 디버그하고 다음 블록으로 이동합니다. 그리고 프로그램이 끝날 때까지 계속됩니다.

감사합니다 한번 볼게요...
 
evillive :

안녕하세요!

그런 것이 있다면 아파트를 결정하는 확실한 방법을 알려주십시오.

있다. 주에 나는 기초를 포함하여 실제 비용을 청구합니다.
 
evillive :

안녕하세요!
그런 것이 있다면 아파트를 결정하는 확실한 방법을 알려주십시오.

플랫은 하나 이상의 플랫 요소로 구성된 가격 움직임입니다.
플랫 요소는 가격이 시작점에서 임의의 방향으로 움직일 때 형성되는 가격 움직임의 요소입니다. 이 시점으로의 후속 가격 롤백.

 

명령은 주문을 하는 데 사용됩니다.

tikett= OrderSend ( Symbol (), OP_SELLSTOP,  volume*A, Price -otstup* Point , Point * 3 ,R2, Price-takeprofit* Point -otstup* Point , "OP_SELLSTOP" , 2000 ,  expiration, C'0,128,255' );

여기서 OrderSend는 로봇이 주문을 하기 위한 명령이며, 통화 쌍은 괄호 안의 첫 번째 위치에 입력됩니다. 여기에 기호 ()를 입력 하면 어드바이저가 부착된 쌍을 알려주는 기능입니다. 그런 다음 무역 작업의 이름입니다 . 그런 다음 로트의 볼륨, 여기에서 변수가 내에서 곱해집니다. 가격, 그러면 기억이 안 납니다. 일종의 포용력, 3점, 그 다음 손실 방지, 이익 실현, 일부 이름(이름), 그 다음 매직 넘버 - 선택한 숫자, 그 다음 기억이 나지 않는 숫자, 그 다음 색상 . 모든 이름은 그 순서입니다. ticett= 없이는 OrderSend만 있으면 가능합니다.

그리고 보라, 주목하라! 시작 부분에 맞추기 위한 경우 최대 수백 개의 주문까지 매 틱마다 주문이 이루어집니다. 필요할 때 주문을 하기 위해서는 조건이 필요합니다. 예시.

 for ( i= OrdersTotal ();i> 0 ;i--){ OrderSelect (i- 1 ,SELECT_BY_POS ); //Alert ("OrderType( )", OrderType( ));
 if ( OrderMagicNumber ( )== 2000 && OrderSymbol ()== Symbol ()) { 
if ( OrderType ( ) ==OP_SELLSTOP) { Y++;}
if ( OrderType ( ) ==OP_SELL) { Y++;}}}
Y=Y-dolivka1; //Alert ("Y++", Y," dolivka1 ",dolivka1);
 if (Y<= 0 ){ // Alert ("Y", Y );
   tikett= OrderSend ( Symbol (), OP_SELLSTOP,  volume*A, Price -otstup* Point , Point * 3 ,R2, Price-takeprofit* Point -otstup* Point , "OP_SELLSTOP" , 2000 ,  expiration, C'0,128,255' );
   // Alert ("OP_SELLSTOP", GetLastError( )); 
    Error= GetLastError ( ); } J= 0 ;

   if (Error != 0 ) { Print ( " Error OP_SELLSTOP " , Error , "tikett" ,tikett, " volume*A " ,volume*A, " Price -otstup*Point " ,Price -otstup* Point , " Price-takeprofit*Point-otstup*Point " ,Price-takeprofit* Point -otstup* Point , 
   " Ask " , Ask , " Bid " , Bid );
   Error= 0 ;}

피곤한. 도움말을 사용하여 기성품 예제를 분해하십시오.

 
drknn :


여기 봤어? https://book.mql4.com/en/samples/index

일반적으로 다른 프로그램과 마찬가지로 귀하의 프로그램은 각각 특정 작업을 수행하는 별도의 블록으로 구성됩니다. 우리는 그러한 블록 하나를 가져와서 코드를 직접 작성하고 디버그하고 다음 블록으로 이동합니다. 그리고 프로그램이 끝날 때까지 계속됩니다.


그리고 질문을 더 정확하게 하려고 노력할 것입니다... 내 전문가 고문은 하나의 보류 주문을 성공적으로 열었으며 잠시 후 수정해야 합니다... 이렇게 하려면 해당 인덱스 또는 위치 번호를 알아야 합니다. 주문을 보류. 이 포지션 넘버나 인덱스는 어떻게 얻을 수 있나요??? for 루프를 사용하여 주문을 정렬해야 합니까??? 결국, 나는 하나의 주문을 가지고 있습니다 ... 여기 내 유휴 프로그램 코드의 일부가 있습니다


if (OrderSelect(1, SELECT_BY_POS, MODE_TRADES)==true)

{티켓 = OrderTicket();

반품();}

어떻게 하면 더 잘 쓸 수 있을까요?

 
AlexLaptist :


그리고 질문을 더 정확하게 하려고 노력할 것입니다... 내 전문가 고문은 하나의 보류 주문을 성공적으로 열었으며 잠시 후 수정해야 합니다... 이렇게 하려면 해당 인덱스 또는 위치 번호를 알아야 합니다. 주문을 보류. 이 포지션 넘버나 인덱스는 어떻게 얻을 수 있나요??? for 루프를 사용하여 주문을 정렬해야 합니까??? 결국, 나는 하나의 주문을 가지고 있습니다 ... 여기 내 유휴 프로그램 코드의 일부가 있습니다


if (OrderSelect(1, SELECT_BY_POS, MODE_TRADES)==true)

{티켓 = OrderTicket();

반품();}

어떻게 하면 더 잘 쓸 수 있을까요?


OrderSend() 함수가 성공적으로 실행되면 방금 열린 주문의 티켓 번호를 반환합니다. 이것은 서버에 있는 일련 번호이며 다른 주문은 없습니다. 따라서 두 번째 주문 열거를 준비할 필요가 없습니다. 티켓을 기억하기만 하면 됩니다. 주문을 연 직후 기억하십시오.

 int Ticket= OrderSend ();
if (Ticket< 0 ){
// тут принтуем сообщение об ошибке.
}
// Вам нужно всё равно создать счётчик ордеров, который обнулит переменную Ticket в том случае, если ордера в рынке больше нет.
 
drknn :


OrderSend() 함수가 성공적으로 실행되면 방금 열린 주문의 티켓 번호를 반환합니다. 이것은 서버에 있는 일련 번호이며 다른 주문은 없습니다. 따라서 두 번째 주문 열거를 준비할 필요가 없습니다. 티켓을 기억하기만 하면 됩니다. 주문을 여는 즉시 기억하십시오 .

그리고 얼마나 오래 그를 "기억"할 것입니까? 잃어버릴 수 있다...

IMHO - 필요한 경우 항상 최신 정보를 가져와야 하며 경우에 따라 메모리에 저장하지 않아야 합니다.

그래도 기회를 바라는 것보다 수정하기 직전에 주문을 찾는 것이 낫습니다 ... 아마도 전원이 꺼지지 않을 것입니다. 예를 들어 ...

 
AlexLaptist :


그리고 마찬가지로 질문을 더 정확하게 하려고 노력할 것입니다... 내 전문가 고문은 하나의 보류 중인 주문을 성공적으로 열고 잠시 후 수정해야 합니다... 이렇게 하려면 해당 인덱스 또는 위치 번호를 알아야 합니다. 주문을 보류. 이 포지션 넘버나 인덱스는 어떻게 얻을 수 있나요??? for 루프를 사용하여 주문을 정렬해야 합니까??? 결국, 나는 하나의 주문을 가지고 있습니다 ... 여기에 내 유휴 프로그램 코드의 일부가 있습니다


if (OrderSelect(1, SELECT_BY_POS, MODE_TRADES)==true)

{티켓 = OrderTicket();

반품();}

어떻게 하면 더 잘 쓸 수 있을까요?

아마도 다음과 같습니다.

 //+----------------------------------------------------------------------------+
int TicketLastSetOrder( string sy, int mn) { // 
   datetime t;
   int       i, op, ticket=- 1 ;
   for (i= 0 ; i< OrdersTotal (); i++) {
       if ( OrderSelect (i, SELECT_BY_POS)) {
         op= OrderType ();
         if ( OrderMagicNumber ()!=mn)   continue ;
         if ( OrderSymbol ()!=sy)         continue ;
         if (op< 2 || op> 5 )             continue ;
         if ( OrderOpenTime ()>t)  {
            t= OrderOpenTime ();
            ticket= OrderTicket ();
            }
         }
       else Print ( "FUNC TicketLastSetOrder(): Error select order: " + GetLastError ());
      }
   return (ticket);
}
//+----------------------------------------------------------------------------+

마지막 주문의 티켓을 반환하거나 -1

호출할 때 조언자의 원하는 기호와 마법을 지정합니다. 예를 들면 다음과 같습니다.

   int TicketMyOrder=TicketLastSetOrder( Symbol (), Magic);

이 기능은 현재 기호(귀하의 경우에는 유일한 것)에서 마지막으로 배치된 보류 주문 의 티켓을 반환합니다. 매직 - 고문의 매직 넘버

 

티켓을 전역 변수 에 넣을 수 있습니다. :) 당신은 일반적으로 뿔에서 지옥을 돌릴 수 있습니다. 그러나 아이디어로 수정하기 전에 순서를 선택하는 것이 효과적입니다. 이는 동시에 주문의 전체 수명 동안 로트를 한 번만 재설정할 필요가 없는 경우에만 해당됩니다(동시에 단일 수정 포함) :)

요컨대, 많은 옵션이 있습니다 :)

 

알려주세요. 나는 여전히 지표가 어떻게 작동하는지 이해하지 못했습니다. 여기에서 내 표시기는 기간을 변경할 때 그리지 않으므로 두 번마다 그립니다. 그러나 때때로 그는 그림을 그리고 내가 원하는 것에 대해! 무엇이 누락되었는지 알려주세요.

 //+------------------------------------------------------------------+
//|                                            ИндюкДимонакомпил.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link       "http://www.metaquotes.net"
#import "user32.dll"
   int    PostMessageA( int   hWnd, int   Msg, int   wParam, string lParam);
#import
#define WM_COMMAND                     0x0111
int delimiter = 0 ;

#property indicator_chart_window

#property indicator_buffers 3
#property indicator_color1 Green
#property indicator_color2 Red
#property indicator_color3 DarkBlue
double ВерхняячертаBuffer1[];
double НижняячертаBuffer2[];
double СинняячертаBuffer3[];
 double вершина; 
 double основание_первого_снижения;
 double начало;
 double вершина_волны_3;
 extern int T= 4 ,K= 200 ;
 int timeframe, start ;
 int бар_вершина ;
 int бар_основание_первого_снижения;
 int бар_начало;
int pereklutsatel;
double naklon,linija2; int P; extern int RO=- 1 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators

SetIndexStyle ( 0 , DRAW_SECTION , STYLE_SOLID , 2 , CLR_NONE ); //Alert ("SetIndexStyle ",GetLastError( ) );
   SetIndexBuffer ( 0 ,ВерхняячертаBuffer1); //Alert ("SetIndexBuffer ",GetLastError( ) );
   SetIndexEmptyValue ( 0 , 0.0 );
   
   SetIndexStyle ( 1 , DRAW_SECTION , STYLE_SOLID , 2 , CLR_NONE ); //Alert ("SetIndexStyle ",GetLastError( ) );
   SetIndexBuffer ( 1 ,НижняячертаBuffer2); //Alert ("SetIndexBuffer ",GetLastError( ) ); 
   SetIndexEmptyValue ( 1 , 0.0 );
   
   SetIndexStyle ( 2 , DRAW_SECTION , STYLE_SOLID ,T, CLR_NONE ); //Alert ("SetIndexStyle ",GetLastError( ) );
   SetIndexBuffer ( 2 ,СинняячертаBuffer3); //Alert ("SetIndexBuffer ",GetLastError( ) ); 
   SetIndexEmptyValue ( 2 , 0.0 );
   
   
   ObjectDelete ( "вершина" );
   ObjectDelete ( "основание_первого_снижения  " );
   ObjectDelete ( "начало" );
     ObjectDelete ( "точка4" );
     ObjectDelete ( "пятая_точка!" );
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   ObjectDelete ( "вершина" );
   ObjectDelete ( "основание_первого_снижения  " );
   ObjectDelete ( "начало" );
     ObjectDelete ( "точка4" );
     ObjectDelete ( "пятая_точка!" );
   ObjectsDeleteAll ( WindowOnDropped ( ) , OBJ_TEXT );
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int     counted_bars= IndicatorCounted ();
   int limit= Bars -counted_bars- 1 ;

   for ( int i=limit;i>= 0 ;i--) {
//----
 for ( int J= 0 ;J<=RO;J++){
//----

   // for(int i=Bars; i>=0;i--)
   i= Bars ;
      бар_вершина= iHighest ( NULL ,  timeframe, MODE_HIGH, K, start ) ;
       вершина =High[ бар_вершина ];
       бар_основание_первого_снижения= iLowest ( NULL ,  timeframe, MODE_LOW, NormalizeDouble ( бар_вершина/ 2 , 0 ), start ) ;
       основание_первого_снижения=Low[ бар_основание_первого_снижения ];
       бар_начало= iLowest ( NULL ,  timeframe, MODE_LOW, NormalizeDouble (бар_вершина* 1.5 , 0 ), бар_вершина ) ;
       начало=Low[ бар_начало ];
       
   ObjectCreate ( "вершина" ,   OBJ_TEXT , WindowOnDropped ( ) , Time[бар_вершина],  вершина+( 10 * Point )) ; 
     ObjectSetText ( "вершина" , "вершина" , 5 , "вершина" , Crimson ) ; // Alert("GetLastError()",GetLastError());
       // ObjectSet(  "вершина",  OBJPROP_COLOR, Crimson) ;
      
   ObjectCreate ( "основание_первого_снижения" ,   OBJ_TEXT , WindowOnDropped ( ) , Time[бар_основание_первого_снижения],  основание_первого_снижения-( 10 * Point )) ; 
     ObjectSetText ( "основание_первого_снижения" , "основание_первого_снижения" , 5 , "основание_первого_снижения" , Crimson ) ;   
   
     ObjectCreate ( "начало" ,   OBJ_TEXT , WindowOnDropped ( ) , Time[бар_начало],  начало-( 10 * Point )) ; 
     ObjectSetText ( "начало" , "начало" , 5 , "начало" , Crimson ) ;   
           
   if (начало>основание_первого_снижения){naklon=(начало-основание_первого_снижения)/(бар_начало-бар_основание_первого_снижения);
 // Alert("naklon  ", naklon);
    НижняячертаBuffer2[бар_начало]=начало;linija2=начало; for (i=бар_начало- 1 ;i>= 0 ;i--){linija2=linija2-naklon;
   
    НижняячертаBuffer2[i]=linija2;   // Alert ("linija2  " , linija2 ); 
     Alert ( "НижняячертаBuffer2[i]  " , НижняячертаBuffer2[i] , "  i " , i);
     
   }
    НижняячертаBuffer2[бар_основание_первого_снижения]=основание_первого_снижения;}
    
    
         for (i= 0 ;i< 100 ;i++){  СинняячертаBuffer3[i]= Open[i];}
           for (i= 330 ;i< 500 ;i++){  СинняячертаBuffer3[i]= Open[i];}

     ВерхняячертаBuffer1[бар_начало]=начало;
     
 double точка 4 ; int бар_точка 4 ;   бар_точка 4 = iHighest ( NULL ,  timeframe, MODE_HIGH, бар_основание_первого_снижения, 3 ) ; 
  точка 4 =High[ бар_точка 4 ];  
   
   if (вершина>точка 4 ){naklon=(начало-точка 4 )/(бар_начало-бар_точка 4 );
   ObjectCreate ( "точка4" ,   OBJ_TEXT , WindowOnDropped ( ) , Time[бар_точка 4 ],  точка 4 +( 10 * Point )) ; 
     ObjectSetText ( "точка4" , "точка4" , 5 , "точка4" , Crimson ) ;  
   double linija1=начало; for (i=бар_начало- 1 ;i>= 0 ;i--){linija1=linija1-naklon;ВерхняячертаBuffer1[i]=linija1; }}
   
double vulf=НижняячертаBuffer2[ 0 ];
   if ( vulf==Ask||vulf==Bid){vulf= 1 ;}
 if (vulf+( 10 * Point )>Ask&&vulf-( 10 * Point )<Bid){vulf= 1 ;} 
           
       Alert ( "vulf  " , vulf );   Comment ( "  vulf!!! "   , vulf);  
   if (vulf== 1 ){ Comment ( "  Есть вульв!!! "   , "  timeframe " , timeframe);
   ObjectCreate ( "пятая_точка!" ,   OBJ_TEXT , WindowOnDropped ( ) , Time[ 0 ],  Bid-( 10 * Point )) ; 
     ObjectSetText ( "пятая_точка!" , "пятая_точка!" , 5 , "пятая_точка!" , Crimson ) ;   return ( 0 );  }
     if (vulf!= 1 ) {    
   
     if (delimiter< 3 ){delimiter++; Comment (delimiter); return ( 0 );}
   delimiter= 0 ;
    fChangePeriod();P++;
                                 
                   }  } }
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+

void fChangePeriod(){ int ii,hwd = WindowHandle ( Symbol (), Period ());
   switch ( Period ()){
       case PERIOD_W1     : ii = 33134 ; break ; //PERIOD_D1;
       case PERIOD_D1     : ii = 33136 ; break ; //PERIOD_H4;
       case PERIOD_H4     : ii = 33135 ; break ; //PERIOD_H1;
       case PERIOD_H1     : ii = 33140 ; break ; //PERIOD_M30;
       case PERIOD_M30    : ii = 33139 ; break ; //PERIOD_M15;
       case PERIOD_M15    : ii = 33138 ; break ; //PERIOD_M5;
       case PERIOD_M5     : ii = 33137 ; break ; //PERIOD_M1;
       case PERIOD_M1     : ii = 33141 ; break ; //PERIOD_W1;
   }     
   PostMessageA(hwd, WM_COMMAND, ii, 0 );
   return ;
}