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

 
Valeriy Yastremskiy :

티켓으로 주문선택은 더 일찍 완료됩니다. 주문이 보류 중입니다. 각 틱 에서 주문 유형 을 확인하는 것을 제외하고 주문이 시장 주문이 되도록 하는 요청입니다. 이 시간은 로그에 기록되지만 주문 구조에 이 시간에 대한 필드가 없는 것으로 나타났습니다. 아니면 제가 잘못 알고 있습니까? 내가 올바르게 이해하면 주문 유형을 변경할 때 OrdersTotal() 및 OrdersHistoryTotal도 변경되지 않습니다.

나머지는 명확한 것 같습니다.)

OrderOpenTime을 사용해 보셨습니까? 지연이 트리거되면 변경되는지 기억나지 않습니다.

어떤 경우에 모든 틱 을 확인해야 하는지는 모르겠지만(핵심 작업 전이나 1..5.. 분마다가 아니라) MT4에는 다른 방법이 없습니다.

MT5가 더 편합니다. OTT에서는 트랜잭션에 대해 배우고 목록으로 작업해야 하는 경우 OT에서 처리합니다.

 
datetime some_time= TimeCurrent ();

extern string Symbol3 = "" ; //Инструмент (""текущий по умолчанию)

extern double P= 15 ;       //Таймфрейм

int start()

{

//Инициализация переменных

bool   FractalsUp= false ;

bool   FractalsDown= false ;

int    FractalsUpPrice= 0 ;

int    FractalsDownPrice= 0 ;

int    FractalsLimit= 100 ;

double EMA= iMA ( NULL ,P, 5 , 3 , MODE_EMA , PRICE_CLOSE , 0 );

   //Цикл сканирования последних свечей FractalsLimit, начиная с самых старых и заканчивая самыми последними.

   for ( int i=FractalsLimit; i>= 0 ; i--)

{

       //Если на свече есть фрактал, значение будет больше нуля и будет равно самой высокой или самой низкой цене.

       double fu= iFractals ( NULL , 0 ,MODE_UPPER,i);

       double fl= iFractals ( NULL , 0 ,MODE_LOWER,i);

       //Если есть верхний фрактал, я сохраняю значение и устанавливаю true для переменной FractalsUp.

       if (fu> 0 )

{

FractalsUp= true ;

FractalsDown= false ;

FractalsUpPrice=fu;



if (((Close[ 0 ])>fu)&&( OrdersTotal () == 0 )&&(Close[ 0 ]>Open[ 0 ])&&(Close[ 0 ]>High[ 1 ]&&(Close[ 0 ]>EMA))) 

{  

if (( OrderSelect (OrdersHistoryTotal()- 1 ,SELECT_BY_POS, MODE_HISTORY)== true ))

{

datetime Cd=OrderCloseTime();

int hd=+ iBarShift (Symbol3,P,Cd)+ 1 ;

if (hd<= 2 )

{

return (- 1 );

}

}



metka1();

}

}

//Если есть нижний фрактал, я сохраняю значение и устанавливаю true для переменной FractalsDown.

       if (fl> 0 )

{

FractalsUp= false ;

FractalsDown= true ;

FractalsDownPrice=fl;

if (((Close[ 0 ])<fl)&&( OrdersTotal () == 0 )&&(Close[ 0 ]<Open[ 0 ])&&(Close[ 0 ]<Low[ 1 ]&&(Close[ 0 ]<EMA))) 

{  

if (( OrderSelect (OrdersHistoryTotal()- 1 ,SELECT_BY_POS, MODE_HISTORY)== true ))

{

datetime Cd1=OrderCloseTime();

int hd1=+ iBarShift (Symbol3,P,Cd1)+ 1 ;

if (hd1<= 2 )

{

return (- 1 );

}

}

metka2();

}

}

       //Если свеча имеет верхний и нижний фрактал, значения сохраняются, но мы не считаем его последним фракталом.

       if (fu> 0 && fl> 0 )

{

         FractalsUp= false ;

         FractalsDown= false ;

         FractalsUpPrice=fu;        

         FractalsDownPrice=fl;

}

}

return ( 0 );

}

int metka1()

{              

int send1= OrderSend (Symbol3,OP_BUY, 0.01 ,Ask, 3 ,Bid- 70 * Point ,Bid+ 70 * Point );

return ( 0 );

}

int metka2()

{                        

int send2= OrderSend (Symbol3,OP_SELL, 0.01 ,Bid, 3 ,Ask+ 70 * Point ,Ask- 70 * Point );

return ( 0 );

}

안녕하세요!

나는 도형에 올빼미를 작업합니다. 문제가 있습니다. 돕다. 결론은 다음과 같습니다.

스크립트는 마지막 100개의 캔들 변수[FractalsLimit=100;]에서 마지막 상위 또는 하위 프랙탈을 찾고 BUY 위치를 엽니다 . 상승하는 프랙탈이 깨지면 SELL의 경우도 마찬가지입니다.

그리고 마지막 100개의 양초 중에서 최대 또는 최소 프랙탈을 찾고 이를 고려하여 포지션을 열어야 합니다. 즉, 그는 최대 및 최소 프랙탈에만 집중하고 후자에는 관심을 두지 않았습니다.

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Aleksey Mavrin :

OrderOpenTime을 사용해 보셨습니까? 지연이 트리거되면 변경되는지 기억나지 않습니다.

어떤 경우에 모든 틱 을 확인해야 하는지는 모르겠지만(핵심 작업 전이나 1..5.. 분마다가 아니라) MT4에는 다른 방법이 없습니다.

MT5가 더 편합니다. OTT에서는 트랜잭션에 대해 배우고 목록으로 작업해야 하는 경우 OT에서 처리합니다.

OrderOpenTime은 지연의 시작 시간을 보여줍니다. 문제는 작업을 이해하는 것에 관한 것입니다. 시간은 로그와 로그에 기록되고 다른 곳에는 반영되지 않는 것으로 나타났습니다. 따라서 우리가 그것을 수정하지 않으면 실제로 볼 수 있습니다)))))

내가 올바르게 이해한다면 MT5에서 이것은 포지션/거래를 개시할 것입니다. 주문/거래/포지션으로 나누는 것이 최적의 솔루션으로 나에게 명확하지 않지만 물론 더 많은 데이터가 있습니다.

 
Aleksey Mavrin :

때로는 발생합니다)) 1은 영어 문자 li 등의 배경에 대해 매우 손실되므로 접미사 001, 2 ... 등을 호출하는 것이 더 편리합니다.

나는 당신을 이해합니다) 오류를 수정했습니다. 이제 두 번째 핸들의 값은 1.0입니다. 두 번째 핸들보다 첫 번째 핸들에 더 높은 시간 프레임이 설정되어 있으면 두 번째 핸들의 값은 0과 같습니다. 두 번째 핸들의 올바른 값을 얻기 위해 수정해야 할 다른 사항을 알려주세요.

 void OnTick ()
  {
   double PriceArray[];
   
   int AOhandle = iAO ( _Symbol , PERIOD_M15 );
   
   ArraySetAsSeries (PriceArray, true );
   
   CopyBuffer (AOhandle, 0 , 0 , 3 , PriceArray);
   
   double AOvalue = NormalizeDouble (PriceArray[ 0 ], 6 );

   double PriceArray01[];
   
   int AOhandle01 = iAO ( _Symbol , PERIOD_H1 );
   
   ArraySetAsSeries (PriceArray01, true );
   
   CopyBuffer (AOhandle01, 1 , 0 , 3 , PriceArray01);
   
   double AOvalue01 = NormalizeDouble (PriceArray01[ 0 ], 6 );
    
   Comment ( "Awesome Oscillator Value: " , AOvalue, "\n" , "\n" ,
             "Awesome Oscillator Value: " , AOvalue01);
  }
 
Valeriy Yastremskiy :

OrderOpenTime은 지연의 시작 시간을 보여줍니다. 문제는 작업을 이해하는 것에 관한 것입니다. 시간은 로그와 로그에 기록되고 다른 곳에는 반영되지 않는 것으로 나타났습니다. 따라서 우리가 그것을 수정하지 않으면 실제로 볼 수 있습니다)))))

일주일 동안 이 문제를 제기했지만 그는 거래 전략에서 주문하는 원칙을 재고할 것을 제안했습니다.

그러나 이 질문이 여전히 당신에게 매우 중요하다면, 한 틱의 불연속성으로 "수정"하는 것은 전혀 문제가 되지 않습니다.

모든 초보자가 하는 것처럼 "수정"하고 대기 중인 주문의 티켓을 큰 배열로 저장하고 틱이 도착하면 이 티켓을 확인할 수 있습니다. 속도에 대해 이미 썼습니다. 테스터나 실생활에서 중요하지 않지만 문제 - 어레이에 편리하지 않고 정리하는 것이 지루합니다. 오류가 추가됩니다...


내가 연구하기 위해 제안하고 싶은 것 - SB CArrayInt https://www.mql5.com/ru/docs/standardlibrary/datastructures/carrayint

CArrayInt에 티켓을 추가하고 이 데이터 유형을 사용하면 "시장이 된 티켓"을 쉽게 삭제할 수 있습니다.


위에서 쓴 것처럼 정확도는 1틱이고 인증 코드는 최소입니다.

발레리 야스트렘스키 :

내가 올바르게 이해한다면 MT5에서 이것은 포지션/거래를 개시할 것입니다. 주문/거래/포지션으로 나누는 것이 최적의 솔루션으로 나에게 명확하지 않지만 물론 더 많은 데이터가 있습니다.

MT5로 글을 쓸 수 있다면 왜 이야기합니까? 쓰기, 플랫폼이 더 강력하고 기능이 더 높습니다. MT4와 MT5를 비교할 가치가 없으며 MT4에 들어가기가 더 쉽지만 MT5에는 더 많은 기회가 있습니다

 
Igor Makanu :

일주일 동안 이 문제를 제기했지만 그는 거래 전략에서 주문하는 원칙을 재고할 것을 제안했습니다.


그것은 불분명하게 남아 있습니다. 물론 전략은 다릅니다. 충분히 중요한 이벤트가 로그에만 반영된다는 사실에서 문제가 발생했습니다. 그리고 아무도 주문이 시장이 된 시간의 로그 외에는 어디에도 없다고 직접 대답하지 않았습니다.))))

그리고 전략의 논리는 터미널에 의존하지 않습니다. 논리가 절름발이면 물론 최적화할 수 있지만 절름발이는 제거되지 않습니다)))))

 
Valeriy Yastremskiy :

그것은 불분명하게 남아 있습니다. 물론 전략은 다릅니다. 충분히 중요한 이벤트가 로그에만 반영된다는 사실에서 문제가 발생했습니다. 그리고 아무도 주문이 시장이 된 시간의 로그 외에는 어디에도 없다고 직접 대답하지 않았습니다.))))

이 정보가 없습니다 - 노오오오오오오오오오오오오!!!

중요... 글쎄요, 그 이전에 몇 년 동안 전략을 작성했는지, 그리고 그것이 수익을 내더라도 어떻게 되었는지가 중요합니다.)

일반적으로 많은 보류 중인 주문 을 동반하지 않고 시장 주문을 모니터링하며 필요한 경우 보류 중인 주문을 추가합니다.

모든 것이 작성되었습니다. 평균화 및 피라미드화 및 주문 그리드 및 ... 및 잠금 ... 예, 이미 기억나지 않습니다. 거래자 포럼에서 이러한 트릭을 읽어야 합니다. 1년 동안 읽지 않았습니다. 이제 낯선 사람보다 내 자신의 생각이 더 많이 있습니다)))

 
Igor Makanu :

이 정보가 없습니다 - 노오오오오오오오오오오오오!!!

중요... 글쎄요, 그 이전에 몇 년 동안 전략을 작성했는지, 그리고 그것이 수익을 내더라도 어떻게 되었는지가 중요합니다.)

일반적으로 많은 보류 중인 주문 을 동반하지 않고 시장 주문을 모니터링하며 필요한 경우 보류 중인 주문을 추가합니다.

모든 것이 작성되었습니다. 평균화 및 피라미드화 및 주문 그리드 및 ... 및 잠금 ... 예, 이미 기억나지 않습니다. 거래자 포럼에서 이러한 트릭을 읽어야 합니다. 1년 동안 읽지 않았습니다. 이제 낯선 사람보다 내 자신의 생각이 더 많이 있습니다)))

감사해요))))

마틴과 평균화는 자기기만이고 그 이상입니다(VR의 속성을 결정하여 위험을 계산하거나 예측하는 것이 불가능하기 때문에))))) 가끔, 그러나 가끔만 정당화되는 위험)))))

전략이 정확하면 한 번의 주문으로 충분합니다))))

 
Valeriy Yastremskiy :

전략이 정확하면 한 번의 주문으로 충분합니다))))

TS에 하드코딩 된 주문 수가 있는 경우 보류 중인 주문이 있는 현재 틱에서 발생한 일을 결정하는 데 문제가 없습니다.

정확한 시간을 아는 것은 아무 것도 제공하지 않습니다 - 모든 정보는 여전히 진드기가 도착할 때 수신됩니다 - 틱 없음 정보 없음

 

안녕하세요! EA에서 사용자 지정 지표 의 매개변수를 변경하는 방법에 문제가 발생했습니다. 문제는 지표 목록에서 매개변수를 변경할 때 새 복사본이 생성되고 이러한 복사본의 속성으로 이동하면 각 복사본에 고유한 매개변수가 있다는 것입니다. 매개변수의 다른 값을 변경할수록 다른 사본이 많이 생성됩니다. iCustom을 통해 사용합니다.

예를 들어:

#resource "\\Indicators\\inicator.ex4"

외부 정수 Var1=1;

//------------------------------------------------

무효 OnTick()

{

인타;

변수1++;

A=iCustom(Symbol(),PERIOD_CURRENT,"::Indicators\\indicator",Var1,0,0);

결과적으로 지표 목록에서 다음을 볼 수 있습니다.

표시기(매개변수 Var1=2 포함)

표시기(매개변수 Var1=3 포함)

표시기(매개변수 Var1=4 포함)

.... 등.