프로젝트 열기 - DIY 테스터 최적화 도구

 
지표의 형태로 자신의 테스터를 작성하는 아이디어가있었습니다. 요구 사항 - 최소한의 변경으로 고문 은 일반 테스터와 자가 작성 테스터 모두에게 적합해야 합니다. 이것은 표준 상수 및 함수에 접두사 my 를 추가하여 달성됩니다. 최적화도 상당히 수용 가능합니다.
작성된 템플릿, 자신의 기능을 작성하여 거래 기능을 구현해야 합니다.
특별한 사람 - 가입하십시오. 배열 조작을 통한 거래 기능. 또한 차트에 개체를 그리는 전문가가 필요합니다. 열림, 중지 및 화살표/대시로 이익을 얻는 수준을 설명합니다.
또한 Excel에서 차트를 열려면 주문 내역 및 숫자 시리즈의 파일로 출력을 구성해야 합니다. 일반적으로 모든 것이 성인입니다 :)

모든 것을 원칙으로 생각했지만 제너럴리스트는 아닙니다.

관심 있는 사람이 있으면 아이디어를 낼 수 있습니다. 또한 성능 최적화의 경우 자체 제작 버전이 내장 버전을 우회할 수도 있습니다.

//+------------------------------------------------------------------+
//|                                                   SelfTester.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 DarkBlue
#property indicator_color3 LawnGreen
//---- input parameters
extern int       mySpread=4;
extern int       BeginYear=2002;
extern int       BeginMonth=1;
extern int       BeginDay=1;
extern string    ReportName="report";
extern int       Param1=8;
extern int       Param2=13;
extern double    myDepo=10000.0;
extern double    mylots=0.1;
extern int       myTakeProfit=100.0;
extern int       myStopLoss=80.0;
extern int       myTrailingStop=20;
//---- buffers
double myBalance[];
double myEquity[];
double myProfit[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,myBalance);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,myEquity);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,myProfit);
   double TradeOrdersArray[100][14];
   double ClosedOrdersArray[2000][14];
   int myOrdersTotal=0;
   double myOrderOpenPrice=0.0;
   double myOrderLots=0.0; 
   string myOrderComment=""; 
   int myOrderMagicNumber;
   int myOrderOpenTime;
   double myOrderProfit=0.0;
   double myOrderStopLoss=0.0;
   double myOrderTakeProfit=0.0;
   int myOrderTicket;
   int myOrderType; 

   int myOP_BUY=0;
   int myOP_SELL=1;
   int myOP_BUYLIMIT=2;
   int myOP_BUYSTOP=3;
   int myOP_SELLLIMIT=4;
   int myOP_SELLSTOP=5;
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
 
어떤 종류의 kryakozablik이 나타났습니까? 나는 나 자신을 모릅니다. 원하는 사람들이 있을 것입니다. 다른 포럼의 어딘가에 게시하겠습니다.
 
2로쉬
이 공백으로 무엇을 말하고 싶은지 완전히 명확하지 않습니다. 제 생각에는 수익을 계산하는 동시에 차트에 발생/중지 위치를 표시하는 함수 집합을 가져와야 합니까? 모든 사람이 자신만의 의사 결정 엔진을 갖게 될까요?

그리고 몇 가지 팁:
extern int       BeginYear=2002


교체하는 것이 좋습니다

extern string       BeginDate="2002.01.01 18:00"


- 유형의 구성으로 즉시 작업할 수 있습니다.

Time[i] > StrToTime(BeginDate)



예, 아마도 그런 것들

double myOrderOpenPrice=0.0;
double myOrderLots=0.0; 


로 저장하는 것이 더 편리할 것입니다.

#define LOTS 0;
#define OPEN_PRICE 1;

double MyOrder[2] = {0.0, 0.0};
.....................
MyOrder[OPEN_PRICE] = Open[i];
.....................
 


그러나 그것은 일반적으로 사소한 ...

 
Filin, 당신은 주제에서 벗어났습니다. 상수를 정의하는 이유
#define LOTS 0;

이것은 테스터의 입력 변수입니다.

이것은 어디에서 왔습니까?

#define OPEN_PRICE 1;


이 모든 변수(함수로 더 잘 정의할 수 있음)

double myOrderOpenPrice=0.0;
double myOrderLots=0.0; 

mql-4에 내장된 쌍둥이입니다. 우리 테스터와 내장 테스터가 Expert Advisor를 이해하는 것이 목표라고 썼습니다.
최소한의 수정으로.

의사결정 엔진은 EA 코드입니다. 그리고 이 Expert Advisor에 쉽게 통합될 것입니다. 그리고 테스터 엔진은 제가 제안하는 기능입니다.
"재정의" - 즉, OrderSend() 와 같은 표준 내장 함수를 사용하고 이에 따라 완전한 유사성이 myOrderSend() 작성됩니다. 등.
저녁에는 이 기능을 더 명확하게 작성하겠습니다.

더 세심하게, 더 세심하게.. :)

 
어떤 종류의 kryakozablik이 나타났습니까? 나는 나 자신을 모릅니다. 원하는 사람들이 있을 것입니다. 다른 포럼의 어딘가에 게시하겠습니다.

이것은 최근에 나타났습니다. 여기에서 MQL에서 텍스트를 전송할 때 러시아어 문자는 이러한 방식으로 표시됩니다. FronPage는 러시아어 문자와 동일한 작업을 수행합니다.
 
나는 지시 파일에 복사해서 붙일 때 딱딱거리는 소리가 다시 러시아 문자로 변환될 것이라고 생각했다. 그렇지 않다는 것이 밝혀졌습니다. 오늘 밤 다른 포럼에 게시하겠습니다.
링크를 보내드리겠습니다.
 
로쉬,
쓰레기를 버릴 수 없습니까?
그리고 보는 것은 불가능합니다.
이것은 러시아어 텍스트로 스크립트를 복사할 때 포럼, 호스팅 또는 MT의 결함일 수 있습니다.
 
이런 식으로 테스트할 수 있습니다. 그리고 충분한 품질. 그러나 불행히도 보편주의는 작동하지 않을 것입니다.
나는 이 테스트에 몇 주를 보냈다. 언뜻보기에 모든 것이 간단해 보입니다. 일련의 표준 기능 - 그리고 앞으로.
그러나 이 세트는 시작/닫기, 손익 계산, 화살표/대시 그리기 등의 씨앗일 뿐입니다.
가장 중요하고 중요한 것은 열림/닫힘 알고리즘으로 이미 일부 Expert Advisor에서 설명했습니다. 이 알고리즘을 드래그
완전히 작동하지 않습니다. 부분적으로만. 그런 다음 수신된 코드의 "오류 없음"을 추적합니다.
일종의 문제... 간단히 말해서, 두 번째로 동일한 주제에 대해 별도의 프로그램을 처음부터 작성하는 것으로 나타났습니다. 이 모든 후에 1초 안에 얻을 수 있습니다.
결과가 만족스럽지 않거나 화살표가 없거나 해당 위치에 폐쇄가 없습니다. 그리고 다시 프로그램의 텍스트로 올라가고 다시 새로운 방식으로 ...
두뇌는 디버거 대신 작동하고 잠시 동안 모니터 용 콘솔로 변합니다 ... 결국 3 일째에 테스트 통과
정상적인 것 같지만 전략이 "별로 좋지 않다"고 확신하고 있습니다. 그리고 이 단계에서 거의 모든 것! 왜냐하면 이 방법으로 다음 전략을 확인하십시오
의욕이 생기지 않습니다. 내가 왜 이걸 다 썼지? 아이디어가 매력적입니다. 그리고 기본적으로 작동합니다. 하지만 날 믿어, 그녀는 급하게
해결되지 않습니다. 패턴에 대해 이야기한다면 그것은 매우 기본적인 패턴이어야 합니다. 아주 잘 생각한 디자인. 일반적으로,
프로그램이 가장 쉬운 것은 아닙니다. 그리고 누군가이 작품을 읽은 후 설명 된 틀 내에서 창을 부러 뜨리지 않으면, 즉. 이 광산을 사용
조금, 그러나 여전히 실용적인 경험을 하고 시간을 낭비하지 않고 계속 진행하면 아마도 뭔가가 잘 될 것입니다. 그럼 고생하시는 모든 분들
(나를 포함하여) 작가를 기리는 기념비를 세울 것입니다. :)
 
좋아, 약속한 대로 저녁에 한 가지 기능을 수행하면 모든 것이 명확해집니다. 지금까지 자신의 의견으로 - 테스터의 올바른 개발을 통해 다음을 수행할 수 있습니다.
화장품 변경과 함께 네이티브 어드바이저를 사용하십시오. 첫 번째 "피해자"는 MACD_sample.mq4 입니다.
 
로쉬,
쓰레기를 버릴 수 없습니까?
그리고 보는 것은 불가능합니다.
이것은 러시아어 텍스트로 스크립트를 복사할 때 포럼, 호스팅 또는 MT의 결함일 수 있습니다.


"쓰레기"가 제거되었습니다. 프로그래머는 이 쓰레기(코멘트)를 스크랩에 쓰는 방법을 알고 있을 것입니다. :)

표준 상수를 기반으로 이러한 상수를 올바르게 결정했는지 아는 사람이 있습니까?
  int myOP_BUY=0;
   int myOP_SELL=1;
   int myOP_BUYLIMIT=2;
   int myOP_BUYSTOP=3;
   int myOP_SELLLIMIT=4;
   int myOP_SELLSTOP=5;


특정 값을 의미합니다.

 
나는 찻주전자, 왜 바퀴를 재발명합니까? 어리석게 해보자:

   int myOP_BUY=OP_BUY;
   int myOP_SELL=OP_SELL;
   int myOP_BUYLIMIT=OP_BUYLIMIT;
   int myOP_BUYSTOP=OP_BUYSTOP;
   int myOP_SELLLIMIT=OP_SELLLIMIT;
   int myOP_SELLSTOP=OP_SELLSTOP;


사실, 컴파일러의 반응을 미리 알지 못합니다. 표시기 본문에서 거래 상수 를 건너뛸까요 말까요?
놓칠 가능성이 큽니다.