MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1148

 
따옴표가 5자리이고 표시기가 4자리 값을 제공하는 이유는 무엇입니까? 어디에도 반올림은 없습니다.
 
Roman Sharanov :
따옴표가 5자리이고 표시기가 4자리 값을 제공하는 이유는 무엇입니까? 어디에도 반올림은 없습니다.
 IndicatorSetInteger ( INDICATOR_DIGITS , Digits ());
 
Artyom Trishkin :

감사합니다

 

기능이 왜...

 PositionsTotal ()

... 실제로 열린 위치 가 하나 있으면 시간 0에 반환되는 경우가 있습니까? MQL5


그것은 작업의 논리에 달려 있습니다.

 if (trade_p && PositionsTotal () == 0 && trade_o && OrdersTotal () > 0 )
     {
       if (Order_Close()) ExpertRemove ();
     }

...여기 증거가 있습니다


 
좋은 오후, 안드로이드에서 그래프 자동 스크롤을 비활성화하는 방법을 알려주십시오. (메타 트레이더 4)
 
안녕하세요.

나는 혼미가 있다. 전날 종가부터 볼린저밴드 지표의 논리까지 선을 그리는 규칙을 설정할 수 없습니다.

iClose ("USDCHF",PERIOD_D1,0) 기능은 언뜻 보기에는 적합해 보이지만 실제로는 그렇지 않습니다. 시간별 차트에서 주기를 다시 계산하면 모든 것이 즉시 분해됩니다.

 //+------------------------------------------------------------------+
//|                                                       Клюква.mq4 |
//|                                              Алексей Корольков . |
//|                            https://www.mql5.com/ru/users/alekkar |
//+------------------------------------------------------------------+
#property copyright    "2020 Алексей Корольков ."
#property link          "https://www.mql5.com/ru/users/alekkar"
#property description "Клюква"
#property strict

#include <MovingAverages.mqh>

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 LightSeaGreen
#property indicator_color2 LightSeaGreen
#property indicator_color3 LightSeaGreen
//--- indicator parameters
input int     InpBandsPeriod= 20 ;       // Bands Period
input int     InpBandsShift= 0 ;         // Bands Shift
input double InpBandsDeviations= 2.0 ; // Bands Deviations
input string SimbolUSD= "USDIDX.." ;
//--- buffers
double ExtMovingBuffer[];
double ExtUpperBuffer[];
double ExtLowerBuffer[];
double ExtStdDevBuffer[];
double Drv,DrvIn,min,max,minIn,maxIn,xx,xIn,natr,natrIn,ma1,ma2,bid1,bid2,R1,R2,R01,R02;
int tm,mn;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ( void )
  {
//--- 1 additional buffer used for counting.
   IndicatorBuffers( 4 );
   IndicatorDigits( Digits );
//--- middle line
   SetIndexStyle( 0 , DRAW_LINE );
   SetIndexBuffer ( 0 ,ExtMovingBuffer);
   SetIndexShift( 0 ,InpBandsShift);
   SetIndexLabel( 0 , "Bands SMA" );
//--- upper band
   SetIndexStyle( 1 , DRAW_LINE );
   SetIndexBuffer ( 1 ,ExtUpperBuffer);
   SetIndexShift( 1 ,InpBandsShift);
   SetIndexLabel( 1 , "Bands Upper" );
//--- lower band
   SetIndexStyle( 2 , DRAW_LINE );
   SetIndexBuffer ( 2 ,ExtLowerBuffer);
   SetIndexShift( 2 ,InpBandsShift);
   SetIndexLabel( 2 , "Bands Lower" );
//--- work buffer
   SetIndexBuffer ( 3 ,ExtStdDevBuffer);
//--- check for input parameter
   if (InpBandsPeriod<= 0 )
     {
       Print ( "Wrong input parameter Bands Period=" ,InpBandsPeriod);
       return ( INIT_FAILED );
     }
//---
   SetIndexDrawBegin( 0 ,InpBandsPeriod+InpBandsShift);
   SetIndexDrawBegin( 1 ,InpBandsPeriod+InpBandsShift);
   SetIndexDrawBegin( 2 ,InpBandsPeriod+InpBandsShift);
//--- initialization done
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Bollinger Bands                                                  |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
   int i,pos;
//---
   if (rates_total<=InpBandsPeriod || InpBandsPeriod<= 0 )
       return ( 0 );
//--- counting from 0 to rates_total
   ArraySetAsSeries (ExtMovingBuffer, false );
   ArraySetAsSeries (ExtUpperBuffer, false );
   ArraySetAsSeries (ExtLowerBuffer, false );
   ArraySetAsSeries (ExtStdDevBuffer, false );
   ArraySetAsSeries (close, false );
//--- initial zero
   if (prev_calculated< 1 )
     {
       for (i= 0 ; i<InpBandsPeriod; i++)
        {
         ExtMovingBuffer[i]= EMPTY_VALUE ;
         ExtUpperBuffer[i]= EMPTY_VALUE ;
         ExtLowerBuffer[i]= EMPTY_VALUE ;
         
        }
     }
//--- определение АТР  
for (i=InpBandsPeriod- 1 ; i>= 0 ; i--)
        {
         xx=High[i]-Low[i];
         Drv+=xx;
         if (min>xx) min=xx;
         if (max<xx) max=xx;
         xIn= iHigh (SimbolUSD, NULL ,i)- iLow (SimbolUSD, NULL ,i);
         DrvIn+=xIn;
         if (minIn>xIn) minIn=xIn;
         if (maxIn<xIn) maxIn=xIn; 
        }   
 Drv/=InpBandsPeriod;
 DrvIn/=InpBandsPeriod;
 natr=((Drv-min)/(max-min))* 100 ; //тут определяем пройденное значение атр инструментом на графике
 natrIn=((DrvIn-minIn)/(maxIn-minIn))* 100 ; //тут определяем пройденное значение атр инструментом на индексе доллара
 //средние АТР
 ma1= iMA ( NULL , 0 ,InpBandsPeriod, 0 , 2 , 1 , 0 );
 ma2= iMA (SimbolUSD, 0 ,InpBandsPeriod, 0 , 2 , 1 , 0 ); 
 //определяем знак АТР
 bid1=MarketInfo( NULL ,MODE_BID);
 bid2=MarketInfo(SimbolUSD,MODE_BID);
 if (bid1-ma1< 0 ) Drv=Drv*(- 1 ); // если цена падает значит минус
 if (bid2-ma2< 0 ) DrvIn=DrvIn*(- 1 ); // если цена падает значит минус
 
 // а теперь сама она родная 
 //где Drv инструмент графика,а DrvIn индекс доллара
 //расчёт индекса волатильности для инструмента
 R01 = ( 1 -( 1 +Drv)/( 1 +max))* 100 ; //используем для движения вверх
 R02 = ( 1 -( 1 -Drv)/( 1 +max))* 100 ; //используем для движения вниз
 //расчёт индекса волатильности для доллара
 R1 = ( 1 -( 1 +DrvIn)/( 1 +maxIn))* 100 ; // 
 R2 = ( 1 -( 1 -DrvIn)/( 1 +maxIn))* 100 ; //используем для движения вниз 
 // далее сам расчёт
 
 
         
     
//--- начальный расчет
   if (prev_calculated> 1 )
      pos=prev_calculated- 1 ;
   else
      pos= 0 ;
//--- главный цикл
   for (i=pos; i<rates_total && ! IsStopped (); i++)
     { 
       //--- средняя линия
      ExtMovingBuffer[i]=SimpleMA(i,InpBandsPeriod,close);
       //--- рассчитайте и запишите со стандартным отклонением
      ExtStdDevBuffer[i]=StdDev_Func(i,close,ExtMovingBuffer,InpBandsPeriod); // тут наверно смогу разместить код 
       //--- верхняя линия указывает зону перекупленности
     // -- тут хотел параметр ExtMovingBuffer[i] заменить на  iClose("USDCHF",PERIOD_D1,0)
      ExtUpperBuffer[i]=ExtMovingBuffer[i]+(max)*(R01+R2)/ 2 ; //Print("Drv ",Drv,",DrvIn",DrvIn,", R1", R1,", R2 ", R2);
       //--- нижняя линия указывает зону перепроданности
      ExtLowerBuffer[i]=ExtMovingBuffer[i]+(-max)*(R02+R1)/ 2 ; 
       //---
     }
//---- OnCalculate done. Return new prev_calculated.
   return (rates_total);
  }
//+------------------------------------------------------------------+
//| Calculate Standard Deviation                                     |
//+------------------------------------------------------------------+
double StdDev_Func( int position, const double &price[], const double &MAprice[], int period)
  {
//--- variables
   double StdDev_dTmp= 0.0 ;
//--- check for position
   if (position>=period)
     {
       //--- calcualte StdDev
       for ( int i= 0 ; i<period; i++)
         StdDev_dTmp+= MathPow (price[position-i]-MAprice[position], 2 );
      StdDev_dTmp= MathSqrt (StdDev_dTmp/period);
     }
//--- return calculated value
   return (StdDev_dTmp);
  }
//+------------------------------------------------------------------+




도와 주셔서 감사합니다

Aliaksei Karalkou
Aliaksei Karalkou
  • www.mql5.com
Опубликовал MetaTrader 4 сигнал Выставил продукт Советник DSvoltage  использует индикатор MACD. Торговый объём зависит от результата предыдущих сделок, фиксированного лота, и размера показателя Автолота. Советник DCvoltage хеджирует размер позиции и направление в зависимости от ситуации на рынке за счёт перекрытых ордеров. В советнике...
 

안녕하세요.

바이너리 파일에 대한 질문이 있습니다. 어떻게든 꼬리를 잘라낼 수 있습니까?

[삭제]  
Yurij Kozhevnikov :

안녕하세요.

바이너리 파일에 대한 질문이 있습니다. 어떻게든 꼬리를 잘라낼 수 있습니까?

파일 이름 = "this@tail.bin";

파일 이름 = "a_this@no_tail";

)))

아니면 무슨 꼬리를 말씀하신 겁니까?

 
Сергей Таболин :

파일 이름 = "this@tail.bin";

파일 이름 = "a_this@no_tail";

)))

아니면 무슨 꼬리를 말씀하신 겁니까?

바이너리 파일 위로 포인터를 이동하고 어디에서나 읽고 쓸 수 있습니다. 현재 지점에서 파일 끝까지 어떻게든 삭제, 지우기가 가능합니까? 파일 끝의 부호를 녹음하시겠습니까? 볼륨을 높일 수 있습니다. 줄일 수 있습니까? 덮어쓰지 않고.

 
Yurij Kozhevnikov :

안녕하세요.

바이너리 파일에 대한 질문이 있습니다. 어떻게든 꼬리를 잘라낼 수 있습니까?

그것은 금지되어있다

4-ki 섹션에서 주제를 찾으십시오. 일주일 전에 그러한 질문이 있었고 누군가가 WinAPI 호출(.dll)을 사용하여 솔루션을 제안했습니다.