초보자의 질문 MQL4 MT4 MetaTrader 4 - 페이지 31

 
옵션으로 이 상태에서 이 삭제 기능을 등록하는 방법을 알려주세요.
 
spoiltboy :
옵션으로 이 상태에서 이 삭제 기능을 등록하는 방법을 알려주세요.

먼저 삭제해야 하는 지연 티켓을 결정해야 합니다.

티켓이 0이거나 정의되지 않은 경우 - 삭제하지 마십시오.

 
spoiltboy :

이것은 다른 주문에 대한 것입니다. 조건별로 하나씩 삭제하고, 조건 없이 다른 하나를 삭제하는 기능입니다.

문제는 제 경우 삭제 기능이 조건 없이 성공적으로 작동하는 이유이고, 조건에 넣으면 조건이 발생했을 때 오류가 발생하는 이유입니다.

조건을 수정해야 합니다. 조건 없이는 불가능합니다. 로그가 전체 하드 디스크를 차지하게 됩니다.
 
Renat Akhtyamov :

먼저 삭제해야 하는 지연 티켓을 결정해야 합니다.

티켓이 0이거나 정의되지 않은 경우 - 삭제하지 마십시오.

따라서 하나는 ticketD이고 다른 하나 는 ticketUP입니다.

아니면 내가 뭔가를 혼동하고 있습니까?

 
spoiltboy :

따라서 하나는 ticketD이고 다른 하나 는 ticketUP입니다.

아니면 내가 뭔가를 혼동하고 있습니까?

ticketUP 이 이미 삭제되었는지 어떻게 확인할 수 있습니까?

제거됨, 티켓업을 필요한 상태로 업데이트하고 지연 삭제 조건이 작동하지 않으며 이 조건도 코드에 추가해야 합니다.

 
Renat Akhtyamov :

ticketUP 이 이미 삭제되었는지 어떻게 확인할 수 있습니까?

제거됨, 티켓업을 필요한 상태로 업데이트하고 지연 삭제 조건이 작동하지 않으며 이 조건도 코드에 추가해야 합니다.

따라서 티켓이 티켓D인 주문 , 다른 티켓UP 먼저 생성되고(부재 조건에 따라), 그 후에는 이미 삭제됩니다.

if (BuyLimitCount()== 0 && BuyCount()== 0 ){
slB= NormalizeDouble (minpr1-pointssl* Point , 5 );
tpB= NormalizeDouble (minpr1+pointtp* Point , 5 );
int ticketUP= OrderSend ( 심볼 (), OP_BUYLIMIT , lotB, minpr1, 3 , slB, tpB, "" , MagicB, 0 , 레드);
if (ticketUP==- 1 ) 인쇄 ( "ERROR OP_BUY" ); 또 다른   인쇄 ( "OP_BUY OK" );}

if (SellLimitCount()== 0 && SellCount() == 0 ){
slS= NormalizeDouble (maxpr1+pointssl* Point , 5 );
tpS= NormalizeDouble (maxpr1-pointtp* Point , 5 );
int ticketD= OrderSend ( Symbol (), OP_SELLLIMIT , lotS, maxpr1, 3 , slS, tpS, "" , MagicS, 0 , Blue);
if (ticketD==- 1 ) 인쇄 ( "오류 OP_SELL" ); 또 다른   인쇄 ( "OP_SELL OK" );}

if (x!=maxpr1){x=maxpr1; OrderDelete (티켓D);}

OrderDelete (티켓업);

헷갈리면 어떡하지?

 
spoiltboy :

따라서 티켓이 티켓D인 주문 , 다른 티켓UP 먼저 생성되고(부재 조건에 따라), 그 후에는 이미 삭제됩니다.

if (BuyLimitCount()== 0 && BuyCount()== 0 ){
slB= NormalizeDouble (minpr1-pointssl* Point , 5 );
tpB= NormalizeDouble (minpr1+pointtp* Point , 5 );
int ticketUP= OrderSend ( 심볼 (), OP_BUYLIMIT , lotB, minpr1, 3 , slB, tpB, "" , MagicB, 0 , 레드);
if (ticketUP==- 1 ) 인쇄 ( "ERROR OP_BUY" ); 또 다른   인쇄 ( "OP_BUY OK" );}

if (SellLimitCount()== 0 && SellCount() == 0 ){
slS= NormalizeDouble (maxpr1+pointssl* Point , 5 );
tpS= NormalizeDouble (maxpr1-pointtp* Point , 5 );
int ticketD= OrderSend ( Symbol (), OP_SELLLIMIT , lotS, maxpr1, 3 , slS, tpS, "" , MagicS, 0 , Blue);
if (ticketD==- 1 ) 인쇄 ( "오류 OP_SELL" ); 또 다른   인쇄 ( "OP_SELL OK" );}

if (x!=maxpr1){x=maxpr1; OrderDelete (티켓D);}

OrderDelete (티켓업);

헷갈리면 어떡하지?

따라서 조건 없는 명령이 다시 나타납니다.

OrderDelete (티켓업);

코드가 변경되지 않은 이유는 무엇입니까?

시간을 내서 최소한 "생각"하고 이해하고 + 그들이 당신에게 쓴 것과 그들이 준 조언을 읽으십시오.

그건 그렇고, 여기에 프리랜서 가 있습니다. 작동하지 않으면 ...

 
Renat Akhtyamov :

따라서 조건이 없는 명령이 다시 나타납니다.

OrderDelete (티켓업);

코드가 변경되지 않은 이유는 무엇입니까?

시간을 내서 최소한 "생각"하고 이해하고 + 그들이 당신에게 쓴 것과 그들이 준 조언을 읽으십시오.

그건 그렇고, 여기에 프리랜서 가 있습니다. 작동하지 않으면 ...

이것은 조건이 없는 것입니다. 이것이 삭제가 발생하는 방식이기 때문입니다. 그러나 조건이 있는 것은 아닙니다. 그래서 제가 못하는 부분을 적어보았습니다. 다음과 같이 작성된 경우:

주문삭제(티켓D);

주문삭제(티켓업);

그런 다음 각 틱에서 이전에 각 틱에 생성된 주문(부재 조건에 의해)이 삭제됩니다. 그리고 조건으로 작성하는 경우:

if (x!=maxpr1){x=maxpr1; 주문삭제(티켓D);}

if (z!=minpr1){z=minpr1; 주문삭제(티켓업);}

조건에 접근하면 제거 오류를 기록합니다.

이 조건에서 지정된 주문의 삭제를 기록하는 방법은 무엇입니까?

 
spoiltboy :

이것은 조건이 없는 것입니다. 이것이 삭제가 발생하는 방식이기 때문입니다. 그러나 조건이 있는 것은 아닙니다. 그래서 제가 못하는 부분을 적어보았습니다. 다음과 같이 작성된 경우:

주문삭제(티켓D);

주문삭제(티켓업);

그런 다음 각 틱에서 이전에 각 틱에 생성된 주문(부재 조건에 의해)이 삭제됩니다. 그리고 조건으로 작성하는 경우:

if (x!=maxpr1){x=maxpr1; 주문삭제(티켓D);}

if (z!=minpr1){z=minpr1; 주문삭제(티켓업);}

조건에 접근하면 제거 오류를 기록합니다.

이 조건에서 지정된 주문의 삭제를 기록하는 방법은 무엇입니까?


예금 삭제 조건은 삭제할 수 없습니다!

지연을 열 때 ticketUP 및 ticketD를 전역 변수 에 작성해야 합니다.

GlobalVariableSet ("ticketUP",ticketUP);

GlobalVariableSet("티켓D",티켓D);

그리고 거기에서 예금을 제거하기 전에 계산합니다.

ticketUP=GlobalVariableGet("ticketUP")

ticketD=GlobalVariableGet("티켓D")

그건 그렇고, 거기 봐 (전 세계에서)-당신에게 무슨 일이 일어나고 있는지, 어떤 티켓이 등록되어 있습니까?

그 후에는 모든 것이 원하는 대로 작동할 것이라고 생각합니다.

 
안녕하세요! 누가 문제를 해결하는 데 도움이 될까요? 저는 동적 배열 에 대한 래퍼를 작성 중입니다. 여기에 클래스 코드가 있습니다.
class CArray
{  
private :
   template <typename T>
   T _array[];
   int _index;
   int _err;
   int _err_sys;
public :
   CArray(){_index = - 1 ; _err = 0 ; _err_sys = 0 ;}
   ~CArray(){}
   // template <typename T>
   T operator []( int i){
       if ((_index == - 1 ) || (i < 0 ) || (i > _index)) {_err_sys = - 1 ;}
       return (_array[i]);
   }
   T at( int i){  
       if ((_index == - 1 ) || (i < 0 ) || (i > _index)) {_err_sys = - 1 ;}
       return (_array[i]);
   }
   void push_back(T value ){
      _array[++_index] = value ;
   }
};

프로그램 코드의 일부:

#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.1"
#property strict

#include "Array.mqh"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
CArray *array;


int OnInit ()
  {
   int b = 1 ;
   array = new CArray();
   array.push_back(b);
   int a = array.at( 0 );
  
//---
   return ( INIT_SUCCEEDED );
  }
...

실제 데이터에 대해 Expert Advisor를 실행하려고 하면 다음 오류가 발생합니다. 내부 오류 #-1005

내가 무엇을 잘못하고 있지? 미리 감사드립니다!