포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 360

 
gyfto :

아이 질문이 있습니다. 변수는 코드 헤더에 선언됩니다. 이론적으로 그들은 글로벌합니다. 근데 뭐가 다른지 이해가 안감

~에서

, 이 변수가 코드 헤더에 선언된 경우. 이론상 변수의 범위. 그러나 두 경우 모두 함수 내부에서 볼 수 있습니다. 테스트(스크립트):

- 별 차이를 못 느꼈습니다. 그들의 차이점을 설명할 수 있습니까? 그렇지 않으면 나는 그것을 이해하지 못합니다.

추가 정적이 있습니다. 그것 없이도 작동합니다. 함수 내에서 static을 선언하는 것이 합리적입니다. 범위는 기능 블록일 뿐입니다.
 
Zhunko :
함수 내에서 static을 선언하는 것이 합리적입니다. 범위는 기능 블록일 뿐입니다.


같은 방식으로 작동합니다.

 int a = 10 ;
int start(){
   Alert ( StringConcatenate ( "st: a = " , a)); //st: a = 10
   f1(); Alert ( StringConcatenate ( "f1: a = " , a)); //f1: a = 10
   f2(); Alert ( StringConcatenate ( "f2: a = " , a)); //f2: a = 10
}
void f1(){
   int a = 11 ;
   return ;
}
void f2(){
   static int a = 12 ;
   return ;
}

어떤 경우에 차이가 느껴지나요? ALXIMIKS , 답변도 감사합니다.

 

안녕하세요!

iPhone/ipad에 설치된 mt4에 추가 표시기/로봇을 설치하는 방법을 알려주십시오. 원칙적으로 이것이 가능한가요? Windows에서는 모든 것이 기본적으로 간단하지만 Apple 의 모바일 제품에서는 모든 것이 그렇게 명확하지 않습니다.

가능하다는 논리입니다. 결국 많은 표시기가 이미 사전 설치되어 있습니다. 그러나 파일 구조가 다르기 때문에 무엇을 어디에 복사해야 하는지 명확하지 않습니다. 아무도 그런 문제에 직면하지 않았습니까?

미리 감사드립니다.

 

이동 평균 을 기반으로 지표를 만들고 있습니다. 아이디어는 주어진 지점 내에서 사소한 움직임을 차단하는 것입니다. 필터를 50포인트로 설정했다고 가정해 보겠습니다. 지표는 감소하고 있지만 감소는 50포인트 미만이므로 어제 평균값을 취해 기록하고 현재 날짜의 수준을 설정합니다. 다음 막대에서 현재 값에서 기록된 값을 뺀 차이를 확인합니다. 합계가 50포인트 이하이면 현재 값을 정적 변수에 저장된 수준으로 설정합니다. 값을 초과하면 값이 현재가 됩니다. 즉, 오프셋이 0인 이동 평균과 유사합니다. 다양한 변형을 시도했지만 아직 올바른 솔루션을 찾지 못했습니다.

인식의 편의를 위해 감소만 그리는 코드를 첨부합니다. 문제는 지표가 성장에 의존한다는 것입니다. 그리고 가장 중요한 것은 테스터에서 실행할 때 필터를 넘어서는 것이 없다는 사실에도 불구하고 표시기가 변경되는 것을 시각적으로 볼 수 있다는 것입니다. 기록된 값 "MA_otshet"의 값이 어딘가에서 손실되었다고 가정합니다.

 #property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red 
//--- input parameters
//--- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle ( 0 , DRAW_LINE , 0 , 1 );
   SetIndexBuffer ( 0 ,ExtMapBuffer1);
   IndicatorDigits ( Digits + 1 );
//----
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return ( 0 );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
     int counted_bars= IndicatorCounted (),                      
    limit;
     double
    raznica,raznica_static,MA_0_t,MA_1_t;
   static double MA_otshet;   //здесь хранится запись значения MA_otshet
   
   for ( int i= 0 ;i< Bars ;i++)
   {  
      MA_0_t= iMA ( NULL , 0 , 7 , 0 , MODE_EMA , PRICE_CLOSE ,i+ 0 );  
      MA_1_t= iMA ( NULL , 0 , 7 , 0 , MODE_EMA , PRICE_CLOSE ,i+ 1 ); 
      raznica=MA_0_t-MA_1_t; //разница между сегодня и вчера по скользящей средней
      raznica_static=MA_0_t-MA_otshet; //разница между сегодня и MA_otshet

       if (raznica > - 0.005 && raznica <= 0 ) // если raznica не превышает заданное число 
          {
          MA_otshet=MA_1_t; // записываем значение MA_otshet
          }
       if (raznica_static > - 0.005 && raznica_static <= 0 ) //если raznica_static не превышает заданное число
          {
          ExtMapBuffer1[i]=MA_otshet;   // то рисуем значение индикатора, как записанный MA_otshet
          }
       if (raznica_static < - 0.005 ) // если raznica превышает заданное число
          {
          ExtMapBuffer1[i]=MA_0_t; // то рисуем значение по текущей цене
          }
   } 
   return ( 0 );
  }
//+------------------------------------------------------------------+
 

좋은 오후에요. 도와주세요, 제발.

모든 주문은 2355에 마감되어야 하고 금요일 거래는 2200에 끝나야 거래가 정체됩니다.

시간 섹션의 교과서에서 스크립트를 찾았습니다. 도와주세요. 그날의 매개변수 번호를 추가하세요. 즉, 주문이 금요일 2155시에 마감되고 평일에는 2355시에 마감되도록 하거나 링크를 공유할 수 있는 경우 링크를 공유할 수 있습니다. 기성 솔루션

 //--------------------------------------------------------------------
// timeevents.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
extern double Time_Cls = 16.10 ;          // Время закрытия ордеров
bool Flag_Time = false ;                  // Флаг, сообщения ещё не было 
//--------------------------------------------------------------- 2 --
int start ()                            // Спец. функция start
  {
   int    Cur_Hour = Hour () ;             // Серверное время в часах
   double Cur_Min = Minute () ;           // Серверное время в минутах
   double Cur_time = Cur_Hour + Cur_Min 100 ; // Текущее время
   Alert ( Cur_time ) ;
   if ( Cur_time >= Time_Cls )             // Если наступило время события
      Executor () ;                      //.. то выполняем задуманное
   return ;                             // Выход из start()
  }
//--------------------------------------------------------------- 3 --
int Executor ()                         // Пользовательская функция
  {
   if ( Flag_Time == false )               // Если ещё не было сообщения..
     {                                 // .. то сообщаем (1 раз)
      Alert ( " Время важных новостей. Закройте ордера. " ) ;
      Flag_Time = true ;                  // Теперь сообщение уже было
     }
   return ;                             // Выход из польз. функции
  }

//------------------------------------------------ --------------- 4 --

 


고마워. 하지만 말하지 마세요. 1일만 있으면 됩니다. 즉, 마지막 근무일의 이익에 대한 정보를 표시합니다.

변수가 선언됩니다. 작동하지 않습니다. 모두 0입니다.

for (p=0; p<OrdersHistoryTotal(); p++) {

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {

if (StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))<OrderCloseTime() && (OrderType()==OP_BUY || OrderType()==OP_SELL) )

p0+=OrderProfit()+OrderCommission()+OrderSwap();

}

}

double r0=p0*100/AccountBalance();

 
Zolotai :


고마워. 하지만 말하지 마세요. 1일만 있으면 됩니다. 즉, 마지막 근무일의 이익에 대한 정보를 표시합니다.

변수가 선언됩니다. 작동하지 않습니다. 모두 0입니다.

for (p=0; p<OrdersHistoryTotal(); p++) {

if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {

if (StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))<OrderCloseTime() && (OrderType()==OP_BUY || OrderType()==OP_SELL) )

p0+=OrderProfit()+OrderCommission()+OrderSwap();

}

}

double r0=p0*100/AccountBalance();


Expert Advisor에는 MM_Light 라이브러리가 있으며 다음 기능이 포함되어 있습니다.

 //IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Считаем итоги работы по своим ордерам                                      |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
double fCalculate_Pribul ( int fi_OP = - 2 ,               // тип (BUY\SELL) учитываемых ордеров
                           datetime fdt_TimeBegin = 0 ,   // момент времени, с которого производим расчёт
                           string fs_Comment = "" )       // комментарий ордеров
{
     double    ld_Pribul = 0.0 ;
     int       history_total = OrdersHistoryTotal ();
//----
     for ( int li_ORD = 0 ; li_ORD < history_total; li_ORD++)
    {
         if (!fCheck_MyOrders (li_ORD, fi_OP, MODE_HISTORY )) continue ;
         if (fdt_TimeBegin > OrderCloseTime ()) continue ;
         if (fs_Comment != "" ) { if ( StringFind ( OrderComment (), fs_Comment) < 0 ) continue ;}
        ld_Pribul += ( OrderProfit () + OrderSwap () + OrderCommission ());
    }
//----
     return (ld_Pribul);
}
원리는 이해하기 어렵지 않습니다. 현재 날짜의 이익/손실을 계산하려면 fCalculate_Pribul(-2, iTime(Symbol(), PERIOD_D1, 0), "") 값을 전달해야 합니다.
 
sannin :

좋은 오후에요. 도와주세요, 제발.

모든 주문은 2355에 마감되어야 하고 금요일 거래는 2200에 끝나야 거래가 정체됩니다.

시간 섹션의 교과서에서 스크립트를 찾았습니다. 도와주세요. 그날의 매개변수 번호를 추가하세요. 즉, 주문이 금요일 2155시에 마감되고 평일에는 2355시에 마감되도록 하거나 링크를 공유할 수 있는 경우 링크를 공유할 수 있습니다. 기성 솔루션

//------------------------------------------------ --------------- 4 --

즉석에서 코드는 물론 무릎에 작성되지만 작동해야 합니다. 최소한 알아낼 수는 있습니다.

 int start() {
switch ( DayOfWeek ()){ // если пятница,суббота, и т.д.
 case 4 : //пятница
 case 5 : //суббота на всякий случай
 case 6 : //воскресенье на всякий случай
             if (( Hour ()== 22 && Minute ()>= 00 ) || Hour ()> 22 ){
                 //   Выполняем какое то действие  в пятницу после 22:00
             }
             break ;
 case 0 : //понедельник
 case 1 : //вторник
 case 2 : //среда
 case 3 : //четверг
             if ( Hour ()> 23 || ( Hour ()== 23 && Minute ()> 55 )){
                 // все остальные действия в нормальные рабочии дни ПОСЛЕ 23:55
             }
               break ;
   default :   { //все остальные действия в нормальные рабочии дни до 23:55
  
             }
 }                   
}
 
SetIndexStyle ( 1 , DRAW_LINE , STYLE_DASH , 0 );
이 부분 에서 선 두께 가 지정되는 위치는 무엇입니까? 부끄럽기까지 했다. :(
 
Link_x :
이 부분에서 선 굵기는 어디에 표시되어 있습니까? 부끄럽기까지 했다. :(
마지막 매개변수.