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

 

고맙습니다 ! 코드가 단순해졌습니다. 확실히 더 쉽습니다.

미끄러져 주셔서 감사합니다!

for 루프 (int A = 0; A <100 ; A++) // 이 막대의 열거는 쓸모가 없습니다. 적어도 로그에서 조언자가 화살표가 있는 정확한 위치 또는 오류 번호를 주문했다는 것을 알 수 있습니다. . 요점은 테스터에 신호가 없었다는 것입니다. 같은 지문에서 변수 화살표 1과 2가 모든 막대에서 0인 것을 보았고 상황에서 벗어났습니다.

물론 주기는 어떤 방향으로든 고려될 수 있습니다. 그리고 다시 어디에서나 오류 129가 표시됩니다! 차트에 표시 화살표가 있고 주문이 완료되었는지 확인하고 싶습니다. 따라서 화면에서 처음에는 화살표 변수 1과 2가 동일하고 0에서 17번째 막대에서 주문이 이루어집니다. 다음으로, 이런 틱이 있는 판매가 있다는 인쇄 메시지가 삽입되고 추가 막대의 화살표가 동일합니다. 훌륭합니다!!!

 
다음으로 빨간색 화살표의 매도를 삭제하고 매수를 설정해야 합니다. 갑자기 2개의 주문이 삭제되었습니다!!! 둘 - 분명히 나타난 것과 존재하지 않는 것 같은 것!! 좋아, 지옥에 ... 오류 129가 나타나고 영장이 없습니다! 좋은 자원봉사자 여러분께 너무 혼란을 드려 죄송합니다..
 
//+------------------------------------------------------------------+
//|                                                     советник.mq4 |
//|                        Copyright 2012, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#include <WinUser32.mqh>
  extern double  lot         = 1;                          
  extern int     taymfreym   = 0 ;                           
  extern double  stoplos     = 200 ;                          
  extern double  takeprofit  = 500 ; 
  extern int     magicnumber = 350;
  extern int     ControlBar  = 1;      // номер бара на котором снимаем показания индикатора                     


void BreakPoint()
{//if (!IsVisualMode()) return(0);
    keybd_event (19,0,0,0);
    Sleep (10);
    keybd_event (19,0,2,0);
}

//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   Print (   "  НачалоНачал " ); 
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int i;
int start()
{
  //Print (   "  Начало " ); 
//----
    for (int A = 0; A <100 ; A++) // ни к чему этот перебор баров
    {
        double strela1 = iCustom (NULL, taymfreym, "индикатор", 2, A),
               strela2 = iCustom (NULL, taymfreym, "индикатор", 3, A);
        int BUY = 0, SELL = 0, ticket; 
        Print (A, "  strela1 " , strela1 , "    strela2  " , strela2);
    
    for (int i = OrdersTotal() - 1; i >= 0; i--)
    {  
        if (!OrderSelect (i - 1, SELECT_BY_POS)) continue;  // Если есть следующий
        if (OrderSymbol() != Symbol()) continue;      // Не наш фин. инструм
        if (OrderMagicNumber() != magicnumber) continue;
        int type = OrderType();
        if (type > 1) continue;
        ticket = OrderTicket();
        if (type == 0) {BUY++; Print ("BUY++   " , BUY  ,"  ticket ", ticket); break;}
        if (type == 1) {SELL++; Print ("SELL++   " , SELL  ,"  ticket ", ticket); break;}
    }
    if (strela1 < strela2)
    {
        if (SELL > 0) udalenie (OP_SELL);
        if (BUY == 0)
        {
            OrderSend (Symbol( ), OP_BUY, lot,NormalizeDouble(Ask, Digits), 3, NormalizeDouble( Bid- (stoplos*Point),Digits),   NormalizeDouble( Ask+( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE);           
            Print ("strela1>strela2&&BUY==0&&SELL==0   " , GetLastError()  ,"  Ask ",Ask,"   stoplos= NormalizeDouble( Bid- (stoplos*Point),Digits)  ",
            NormalizeDouble ( Bid- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Ask+( takeprofit*Point),Digits) ", NormalizeDouble( Ask+( takeprofit*Point),Digits));
        }
    }
    else if (strela1 > strela2)
    {
        if (BUY > 0) udalenie (OP_BUY);
        if (SELL == 0)
        {
            OrderSend (Symbol( ), OP_SELL, lot, NormalizeDouble (Bid, Digits), 3, NormalizeDouble( Ask+ (stoplos*Point),Digits),   NormalizeDouble( Ask-( takeprofit*Point),Digits), NULL, magicnumber, 0, CLR_NONE) ; 
            Print ("strela1>strela2&& OP_SELL  " , GetLastError()   ,"  Bid ",Bid,"    stoplos=   NormalizeDouble( Ask- (stoplos*Point),Digits)  ",
            NormalizeDouble (Ask- (stoplos*Point),Digits),"    takeprofit= NormalizeDouble( Bid+( takeprofit*Point),Digits) ", NormalizeDouble(Ask+( takeprofit*Point),Digits));
            Print( "strela1>strela2&& OP_SELL   " , GetLastError()  ," (stoplos*Point) ",(stoplos*Point),"   Point  ", Point,"   Digits  ", Digits);
        }
    }
    }
    BreakPoint();     
//----
    return (0);
}
//+------------------------------------------------------------------+

void udalenie (int Type = -1)
{
    int total = OrdersTotal();
    for (i = total - 1; i >= 0; i--)
    {
        if (!OrderSelect (i, SELECT_BY_POS)) continue;
        if (OrderSymbol() != Symbol()) continue;      // Не наш фин. инструм
        if (OrderMagicNumber( ) != magicnumber) continue;
        int type = OrderType();
        if (type > 1) continue;
        if (Type > -1) if (Type != type) continue;
        bool result = false;
        switch (type)
        { 
            case OP_BUY       : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 3, CLR_NONE ); break;
            case OP_SELL      : result = OrderClose (OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 3, CLR_NONE ); break; 
        }
        if (!result)
        {
            int error =  GetLastError(); 
            string errorcomment = "Неудалось закрыть ордер №" + OrderTicket() + " " + Symbol() + " " + OrderType() + " " + error; 
            Print (errorcomment);
        }  
    }       
}
 
잠시만요, 실례합니다. 전표를 여기저기에 둘게요!
 
Dimka-novitsek :
다음으로 빨간색 화살표에 있는 매도를 제거하고 매수를 설정해야 합니다. 갑자기 2개의 주문이 삭제되었습니다!!! 둘 - 분명히 나타난 것과 존재하지 않는 것 같은 것!! 좋아, 지옥에 ... 오류 129가 나타나고 영장이 없습니다! 좋은 자원봉사자 여러분께 너무 혼란을 드려 죄송합니다..

Dimka - 오후에 코드를 줘 - 내가 데리러 갈게 - 내 " 성배 "가 테스트되는 동안 ... 그리고 뇌에 부하가 필요합니다 ... 그리고 칠면조를 잊지 마세요 ...
 

안녕하세요 여러분 저는 뉴비이니 무리하게 걷어차지 말아주세요. 몇 가지 질문이 나왔습니다.

1) 견적의 전체 내역을 어디에서 다운로드할 수 있습니까? 내가 알기로는 MT4 용어에서 기본적으로 MetaQuotes에서 인용문이 다운로드되지만 2012년 1월부터 2012년 10월까지 구멍이 발견되어 다시 로드할 때 닫히지 않습니다. 이것은 거기에서 전체 이야기에 의심을 던집니다.

2) 역사에 1999년 이전의 날짜가 있는데, 그 날짜에 대한 데이터는 어쩐지 이상하고, 심지어 분 단위로도 아주 적습니다. 누구든지 그것들을 고려하거나 삭제합니까?

3) 그리고 테스트 중에 진행되는 다른 말도 안되는 소리. 나는 펜 테스트처럼 간단하게 Expert Advisor를 작성 하기로 결정했습니다. Buy with Open[1]<MA1 && Close[1]>MA1, Sell은 각각 반대입니다. 그래서 테스트 중 MA(지수)는 테스트 시작일에 따라 항상 다른 값을 보여줍니다. 이 경우 MA 기간(예: 1000-1200)이 길수록 오류가 커집니다. 문제가 무엇입니까?

 
Dimka-novitsek :

고맙습니다 ! 코드가 더 간단해졌습니다. 확실히 더 쉽습니다.

미끄러져 주셔서 감사합니다!

for 루프 (int A = 0; A <100 ; A++) // 이 막대 열거는 쓸모가 없습니다. 조언자가 화살표가 있는 정확한 위치에 주문을 했다는 것은 적어도 로그에서 볼 수 있는 것입니다. 오류 번호. 요점은 테스터에 신호가 없었다는 것입니다. 같은 지문에서 변수 화살표 1과 2가 모든 막대에서 0인 것을 보았고 상황에서 벗어났습니다.

물론 주기는 어떤 방향으로든 고려될 수 있습니다. 그리고 다시 나는 모든 곳에서 오류 129를 봅니다! 차트에 표시 화살표가 있고 주문이 완료되었는지 확인하고 싶습니다. 따라서 화면에서 처음에는 화살표 변수 1과 2가 동일하고 0에서 17번째 막대에서 주문이 이루어집니다. 다음으로, 이런 틱이 있는 판매가 있다는 인쇄 메시지가 삽입되고 추가 막대의 화살표가 동일합니다. 훌륭합니다!!!

주기에 관하여:

 for ( int A = 0 ; A < 100 ; A++)

코드 작성을 하기 전에 우리가 얻고자 하는 것을 분명히 이해해야 합니다. 이미 각 눈금 에 대해 이 표시기를 다시 계산했으며 판독값에 따라 완전한 레이아웃을 가질 수 있습니다. 이 형식(사이클)에서는 strela1 및 strela2 변수의 출구에서 100번째 막대에 판독값이 표시되고 이 판독값(지난 겨울)에 따라 거래합니다(지난 겨울)... :))) 주의를 기울이지 않았습니다. 떨어져 - 당신은 지표 판독의 사이클 열거에 거래 작업을 다시 포함했습니다 - 전체 P ... 물론 당신이 더 잘 알고 있습니다. :)))

 
아니요, 입력-출력, 즉 로봇을 테스트하려면 사이클이 필요합니다. 그가 명령을 내릴 때 실수가 있습니다. 글쎄요 테스터에서 테스트를 안해봐서..
 
Dimka-novitsek :
아니요, 입력-출력, 즉 로봇을 테스트하려면 사이클이 필요합니다. 그가 명령을 내릴 때 실수가 있습니다. 글쎄요 테스터에서 테스트를 안해봐서..

내가 무엇을 말할 수 있습니까? 천재 ... 행운을 빕니다!

추신: 주문 열거 방향의 변경으로 인해 내 코드에서 작은 오류를 발견하고 코드를 더욱 줄였으며 테스터에서 최적화 가능성을 만들기 위해 시도했습니다(직접 확인).
그리고 지표에서 데이터를 올바르게 가져오지 않는다는 의혹이 있습니다. 표시기에는 여러 버퍼가 있습니다(내 버전에서는 4개). 예를 들어 화살표를 그리는 것들에는 화살표가 있는 곳에만 값이 있습니다. 반환된 값이 (내 버전에서는 EMPTY_VALUE ) "빈" 값과 같지 않다는 조건으로 루프(while())를 구성하여 이러한 버퍼에서 신호를 검색할 필요가 있습니다. "화살표가 아닌"(이 버퍼에)이 있는 경우 반환된 값과 가격을 비교하여 신호를 찾아야 합니다.

파일:
lxvhlxyx.mq4  5 kb
 

좋은 낮이든 밤이든! 문제는 말하자면 mt4의 개발자와 다른 모든 사람에게도 해당됩니다.

클라이언트 자체에 내장된 MT의 최소 시스템 요구 사항은 무엇입니까?

Athlon 800MHz, 512mb, XP SP3과 같은 오래된 하드웨어에서 실행하고 싶었습니다. MT 4 또는 5를 시작하면 2초 후에 즉시 붕괴됩니다. 문제는 분명히 Windows나 하드웨어에 있지 않고 디버거가 있는 Visual Studio 가 이 하드웨어에 설치되어 있고(저는 프로그래머입니다) 시스템에서 예외가 발생하지 않습니다(디버거가 작동하지 않기 때문에). 그리고 내가 이해하기로는 클라이언트 자신이 무언가를 좋아하지 않고 결국 접습니다. 글쎄요, 문제는 그 이유가 무엇이며 mt가 좋아하지 않는 것은 무엇입니까? 그것이 실제로 CPU 주파수입니까? ))