초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 189

 
메타 트레이더 5와 이전 4의 차이점은 작업하기가 더 어렵거나 그렇지 않다는 것입니다. 브로커마다 이러한 프로그램을 제공하는데, 왜 모든 브로커에 대해 하나의 프로그램이 없는지, 많이 설치하지 않도록 해야 합니다.
Блог полезных и познавательных статей обо всем, на различную тематику категорий, все интересное, что бы Вам хотелось узнать и найти в материалах Интернет сети
Блог полезных и познавательных статей обо всем, на различную тематику категорий, все интересное, что бы Вам хотелось узнать и найти в материалах Интернет сети
  • es-blogy.ru
Если вами соблюдается диета при язве, то это поможет вам избежать частых обострений и свести их к минимуму; а чем меньше обострений, тем меньше количество медикаментозных препаратов вам нужно принимать. Инфекцию Н. pylori можно обнаружить двумя способами: провести анализ крови; анализ желудочного сока. Эндоскопическое или радиологическое...
 
koctik :
메타 트레이더 5와 이전 4의 차이점은 작업하기가 더 어렵거나 그렇지 않다는 것입니다. 브로커마다 이러한 프로그램을 제공하는데, 왜 모든 브로커를 위한 하나의 프로그램이 없어 많이 설치하지 않는 것일까요?
두 터미널을 모두 다운로드하고 데모 계정에서 사용해 보고 스스로 알아내십시오.
 

닫힌 마지막 위치(더하기 또는 빼기)의 결과를 반환 하는 함수를 만들려고 합니다. 이 기능은 다중 통화 Expert Advisor를 위한 것이며 모든 통화 쌍에서 마지막으로 마감된 위치를 선택해야 합니다. 기능을 고칠 수 있습니까?

 double last_profit()
{  
int dir = 0 ;
double prof = 0 ;
ulong d_ticket;

if ( HistorySelect ( 0 , TimeCurrent ())) 
    {
       int j= HistoryDealsTotal ()- 1 ;
       if (j> 0 )
      {
         d_ticket = HistoryDealGetTicket (j);
         if (d_ticket> 0 )
         { 
         mydeal.Ticket(d_ticket);          
         prof = mydeal.Profit();
         }
       }
     }
if (prof < 0 )dir = - 1 ;
if (prof > 0 )dir = 1 ;
if (prof == 0 )dir = 0 ;

return (dir);
} 

 
Automated-Trading :

OBJ_ALL_PERIODS=2097151

감사합니다. 하지만 작동하지 않았습니다. 문제는 기간 D1 및 ......의 계산이 모든 시간 프레임에 표시되어야 하며 무작위로 실행되지 않는다는 것입니다. 어떻게 할까요???
파일:
macd2.mq5  4 kb
 
Reshetov :

의미: 클래스에서 사용되지 않는 메서드? OOP에서는 그렇지 않습니다. OOP의 일반 프로그래머는 알고리즘 프로그래밍과 달리 필요한 모든 필드와 메서드를 사용하여 클래스를 생성합니다. 동일한 클래스가 나중에 다른 응용 프로그램에서 유용하거나 클래스 라이브러리에 들어갈 수 있기 때문에 모든 경우에 호출됩니다. 한 프로젝트의 프레임워크 내에서도 잘린 클래스가 아닌 본격적인 클래스를 즉시 생성하는 것이 더 낫다는 사실에 대해 말하는 것이 아닙니다. 그래야 나중에 소스 코드를 오르고 필요한 필드를 추가할 필요가 없습니다. 및 방법.

OOP에서 많은 사람들이 알고리즘 프로그래밍에 익숙해진 비용 절감 효과는 나중에 역효과만 납니다. 사용되지 않는 모든 것은 프로그래머가 아니라 컴파일러에 의해 코드에서 제외되어야 합니다.

물론 OOP에서 소스 코드는 알고리즘 프로그래밍보다 큽니다. 그러나 이것은 단점이 아니라 장점이기 때문입니다. 이 프로젝트의 "추가" 코드의 상당 부분은 다른 프로젝트에서 재사용할 수 있습니다.

꼽추를 조각하려고 할 필요가 없습니다. 모든 것을 한 클래스에 넣습니다. 클래스 라이브러리를 만들어야 합니다. 기능을 별도의 클래스로 나누고 이 경제에 주석을 삽입하는 것을 잊지 마십시오. 그러면 모든 것이 정상입니다. 나도 처음에 Pascal 이후에 Java를 공부하기 시작했을 때 오래된 습관에 따라 모든 것을 한 번에 하려고 했습니다. 실제로 그는 OOP를 사용 하는 대신 특정 작업에 필요한 모든 것을 채워넣은 하나의 클래스를 만들었습니다. 알고리즘 프로그래밍에서처럼. 그것은 보편적이지 않은 혼란으로 판명되었으며, 미래에는 더 이상 어디에도 적용 할 수 없으며 그러한 코드를 이해하기 위해 다리를 부러 뜨릴 것이라는 사실은 말할 것도 없습니다.

나는 이 모든 것을 아주 잘 이해합니다. 그러나 VisualStudio에서 수행되는 것처럼 최소한 사용되지 않은 개인 변수를 표시할 수 있습니까?

요점은 클래스가 개발 과정에서 설계된다는 것입니다. 창조 전에 모든 것을 고려하는 것은 불가능합니다. 따라서 프레임 클래스는 가능한 최소한의 기능으로 생성됩니다. 이러한 프레임워크 클래스가 상호 작용함에 따라 공통 아키텍처가 등장하기 시작합니다. 메소드 중 일부는 단순히 삭제되고 일부는 비공개 섹션으로 이동하며 일부는 한 클래스에서 다른 클래스로 마이그레이션됩니다. 그 과정에서 잊혀진 변수, 메서드, 심지어 전체 클래스까지 필연적으로 나타납니다. 이것은 정상입니다. 그것은 Okama의 행동 원칙에 불과합니다. 불량하고 중복되는 코드를 먼저 작성하십시오. 그런 다음 작업을 보다 명확하게 공식화하고 일부 엔터티는 단순히 사라집니다. 중복이 사라집니다. 그리고 바로 이 과정에서 컴파일러의 도움이 매우 도움이 될 것입니다. 사용되지 않는 변수와 최소한 개인 메서드를 보는 것이 매우 도움이 될 것입니다.

 

안녕하세요.

내가 알기로는 지표에 사용되는 OnCalculate () 함수는 자체적으로 생성됩니다. 가격 변동 이벤트가 발생하지 않고,

지표의 어떤 기능을 지표에 적용할 수 있는지, 이는 가격 변동이 시작될 때만 생성됩니다. 감사해요

 
Vikon :

안녕하세요.

내가 알기로는 지표에 사용되는 OnCalculate () 함수는 자체적으로 생성됩니다. 가격 변동 이벤트가 발생하지 않고,

지표의 어떤 기능을 지표에 적용할 수 있는지, 이는 가격 변동이 시작될 때만 생성됩니다. 감사해요

Calculate 이벤트Init 이벤트 및 가격 데이터 변경 사항을 전송한 직후 지표에 대해서만 생성됩니다. OnCalculate 함수에 의해 처리됩니다. 또한 히스토리가 변경되면(히스토리가 스왑될 때) OnCalculate 가 생성됩니다 .

지표에 대한 OnCalculate 는 가격 데이터가 변경될 때 모든 지표 계산이 수행되는 가장 중요한 기능입니다.

 
barabashkakvn :

Calculate 이벤트Init 이벤트 및 가격 데이터 변경 사항을 전송한 직후 지표에 대해서만 생성됩니다. OnCalculate 함수에 의해 처리됩니다. 또한 히스토리가 변경되면(히스토리가 스왑될 때) OnCalculate 가 생성됩니다 .

지표에 대한 OnCalculate 는 가격 데이터가 변경될 때 모든 지표 계산이 수행되는 가장 중요한 기능입니다.

여기에 일종의 집착이 있습니다. 지속적으로 생성되며 기간이 변경되면 판독값이 변경됩니다. 실수는 어디에 있습니까?

#property copyright "Copyright 2014, MetaQuotes Software Corp."
#속성 링크 "http://www.mql5.com"
#속성 버전 "1.00"
#속성 표시기_차트_창
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 기능 |

정수 EMA1=12;
intEMA2=26;
intSMA=9;

ENUM_TIMEFRAMES period_macd;
날짜/시간 t_MACD[];
더블 MACD[];
부울 high_low=거짓;
int shift_start;
더블 w_MACD[],d_MACD[];
int w_MACD_handle, d_MACD_handle;

int barDown=0;
int barUP=0;

//+----------------------------------------------- --------------------+ return(0);
int OnInit()
{
w_MACD_handle=iMACD(NULL,PERIOD_W1,EMA1,EMA2,SMA,PRICE_CLOSE);
d_MACD_handle=iMACD(NULL,PERIOD_D1,EMA1,EMA2,SMA,PRICE_CLOSE);
ArraySetAsSeries(MACD, 참);
ArraySetAsSeries(t_MACD,true);
ArraySetAsSeries(w_MACD,true);
ArraySetAsSeries(d_MACD,true);
반환(INIT_SUCCESSED);
}
//+----------------------------------------------- -------------------+ MACD_handle=iMACD(NULL,PERIOD_W1,EMA1,EMA1,SMA,PRICE_CLOSE);
//| 사용자 지정 표시기 반복 기능 |
//+----------------------------------------------- --------------------+
int OnCalculate(const int rate_total,
const int prev_calculated,
const 날짜/시간 및 시간[],
const 이중 및 열기[],
const 더블 & 하이[],
const 더블 & 로우[],
const 이중 및 닫기[],
const long &tick_volume[],
const 긴 볼륨[],
const int &spread[])
{

ObjectsDeleteAll(0,0,-1);
////////////////////////////////////////////////////// / //////
period_macd=PERIOD_D1;
CopyBuffer(d_MACD_handle,0,0,1000,d_MACD);
ArrayCopy(MACD,d_MACD,0,0,WHOLE_ARRAY);
시작();
ObjectCreate(0,"lin_2",OBJ_VLINE,0,t_MACD[shift_nachalo],0);
ObjectSetInteger(0,"lin_2", OBJPROP_BACK,true);
ObjectSetInteger(0,"lin_2",OBJPROP_TIMEFRAMES,OBJ_ALL_PERIODS);
ObjectSetInteger(0,"lin_2",OBJPROP_COLOR,clrYellow);
ObjectSetInteger(0,"lin_2",OBJPROP_STYLE,1);
반환(요금 합계);
}
//+----------------------------------------------- --------------------+
////////////////////////////////////////////////////// / ////////////////////////////////
void nachalo() //새로운 웨이브의 시작
{
더블 low_nachalo[], high_nachalo[];
CopyTime(NULL,period_macd,0,1000,t_MACD);
(MACD[1]>0) 경우
{높은_낮은=거짓;
동안 (MACD[barDown]>0)
{바다운++;}
barUP=barDown;
동안 (MACD[barUP]<0)
{바업++;}
CopyLow(NULL,period_macd,0,barUP,low_nachalo);
ArraySetAsSeries(low_nachalo,true);
shift_nachalo=ArrayMinimum(low_nachalo,barDown-1,barUP-(barDown-1));
}
만약 (MACD[1]<0)
{높은_낮은=참;
동안 (MACD[barUP]<0)
{바업++;}
barDown=바업;
동안 (MACD[barDown]>0)
{바다운++;}
CopyHigh(NULL,period_macd,0,barDown,high_nachalo);

ArraySetAsSeries(high_nachalo,true);

shift_nachalo=ArrayMaximum(high_nachalo,barUP-1,barDown-(barUP-1));
}}
Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
파일:
macd2.mq5  4 kb
 
Vikon :

여기에 일종의 집착이 있습니다. 지속적으로 생성되며 기간이 변경되면 판독값이 변경됩니다. 실수는 어디에 있습니까?


포럼에 코드 를 게시하는 방법.

 
Vikon :


오류에 주의하십시오.

연결된 표시기 버퍼 없음

사용:

 //---- превращение динамических массивов в индикаторные буферы
   SetIndexBuffer ()
또한 "MQL5 에서 표시기를 작성하는 방법 " 기사를 읽으십시오.



사유: