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

 
deathmond1990 :
안녕하세요. 문제는 특정 거래 기간(즉, 캔들 1개)의 틱 값(해당 가격)을 1차원 배열로 만드는 것이 가능합니까? 그리고 양초가 형성되는 동안 어레이가 형성되는 방식으로 수행하십시오. MQL4에서 실제입니까? 답변해 주시면 감사하겠습니다.


정말로. 동적 배열 및 이동.

 //-----------------------+
int k= 0 ;       //на глобальном уровне
double тики[];
//----------------
void OnTick ()
  {
   ArrayResize (тики,k+ 1 );
   тики[k]= Bid ;
   k++;
  }
//+------------------------
 
Alekseu Fedotov :


정말로. 동적 배열 및 이동.

감사합니다 =)
 
안녕하세요 여러분! 이걸 홍수로 오인하고 싶지는 않지만 이 기능 없이는 할 수 없습니다. 그래서 여러분, 누군가가 모든 주문을 반복하고 차트의 기존 주문에서 가장 작은 로트와 마이너스 이익을 가진 두 번째 주문과 가장 큰 로트와 양수를 가진 두 번째 주문을 동시에 삭제하는 기능으로 나를 도울 수 있습니까? 또한 기존의 이익.
 
Arseniy Barudkin :
안녕하세요 여러분! 이걸 홍수로 오인하고 싶지는 않지만 이 기능 없이는 할 수 없습니다. 그래서 여러분, 누군가가 모든 주문을 반복하고 차트의 기존 주문에서 가장 작은 로트와 마이너스 이익을 가진 두 번째 주문과 가장 큰 로트와 양수를 가진 두 번째 주문을 동시에 삭제하는 기능으로 나를 도울 수 있습니까? 또한 기존의 이익.

OrderCloseBy 를 검색해 보세요.
 

정상 모드와 비정상 모드에서 터미널을 종료한 후에도 모든 전역 변수의 데이터가 저장되도록 하려면 어떻게 해야 합니까?

질문은 다음과 같이 코드 시작 부분에 선언된 변수에 관한 것입니다.

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

extern double  VAR1 = 1;

double VAR2[1000];

VAR1 및 VAR2 값을 잃지 않아야 합니다(배열은 Expert Advisor 작동 중에 데이터로 채워짐). 지금까지 유일한 아이디어는 매 틱마다 파일(global.txt)에 쓰고 터미널이 실행될 때 이 파일(global.txt)을 읽고 변수를 재생성한 다음 매 틱마다 다시 쓰는 것입니다. 어떤 다른 옵션이 있습니까?

 
smart_man :

정상 모드와 비정상 모드에서 터미널을 종료한 후에도 모든 전역 변수의 데이터가 저장되도록 하려면 어떻게 해야 합니까?

질문은 다음과 같이 선언된 변수에 관한 것입니다.

extern double  VAR1 = 1;

double VAR2[1000];

VAR1 및 VAR2 값을 잃지 않아야 합니다(배열은 Expert Advisor 작동 중에 데이터로 채워짐). 지금까지 유일한 아이디어는 매 틱마다 파일(global.txt)에 쓰고 터미널이 실행될 때 이 파일(global.txt)을 읽고 변수를 재생성한 다음 매 틱마다 다시 쓰는 것입니다. 어떤 다른 옵션이 있습니까?

옵션

클라이언트 터미널의 전역 변수

//--------

전역 수준에서 선언된 변수와 혼동하지 마십시오.

 
fxtz :

질문 메타트레이더 4에서 한 번의 클릭으로 주어진 손절매와 이익으로 내가 선택한 2개에서 250개까지의 포지션을 여는 프로그램을 작성할 수 있습니까? 일일이 수동으로 열지 않도록


하나의 상품으로 그렇게 많은 주문을 체결할 수 있는 DC를 찾으셨습니까? 일반적으로 100개 주문은 모든 악기에 대한 한도입니다...

그리고 네, 100개를 열었습니다.

 
Alekseu Fedotov :

OrderCloseBy 를 검색해 보세요.

고맙습니다! 그러나 어떻게 든 적어도 3개의 주문에서 이러한 주문의 티켓을 선택해야 합니다. 더 자주는 5개에서 10개 이상의 주문이 있습니다. 이 주문의 로트와 이익을 별도로 계산하고 비교할 필요가 있습니까?

 
Arseniy Barudkin : 당신은 주문을 위해 티켓을 선택해야합니다,이 주문의 로트와 이익을 별도로 계산하고 비교하는 것이 정말 필요한가요?!

상황은 당신이 상상하는 것보다 훨씬 더 나쁩니다. OrderSelect() 함수에 의해 선택된 한 번에 하나의 주문만 사용할 수 있습니다. 그리고 맨 처음 오더가 선택되면 무엇과 비교할 수 있습니까? 장인은 정말 이런 일을 한다

 double МинПрофит= 1000000 , МаксПрофит=- 1000000 ;
int МаксТикет= 0, МинТикет= 0 ;
for ( int Номер= OrdersTotal - 1 ; Номер>= 0 ; Номер--)
{
   if (! OrderSelect (Номер, SELECT_BY_POS )) continue ;
   if ( OrderProfit ()>МаксПрофит)
   {
      МаксТикет= OrderTicket ();
      МаксПрофит= OrderProfit ();
   }
   else if ( OrderProfit ()<МинПрофит)
   {
      МинТикет= OrderTicket ();
      МинПрофит= OrderProfit ();
   }
 }
그런 다음 발견된 티켓의 가치를 보세요. 갑자기 티켓이 0이 됩니다!!!
 
STARIJ :

상황은 당신이 상상하는 것보다 훨씬 더 나쁩니다. OrderSelect() 함수에 의해 선택된 한 번에 하나의 주문만 사용할 수 있습니다. 그리고 맨 처음 오더가 선택되면 무엇과 비교할 수 있습니까? 장인은 정말 이런 일을 한다

그런 다음 발견된 티켓의 가치를 보세요. 갑자기 티켓이 0이 됩니다!!!

도와 주셔서 감사합니다! 이대로 남겨둔 채 이제 함수가 호출되는 조건을 약간 변경하기로 했습니다. 일반적으로 많은 도움이되었습니다))
 void MarginDefuse( double lot1= 0 , double lot2= 0 )
{
 int ticket1= 0 ,ticket2= 0 ,type=- 1 ;
 double profit1= 0 ,profit2= 0 ;
 bool res1= false ,res2= false ;
 // Выделение
 for ( int i= 0 ; i< OrdersTotal (); i++)
 {
   if (! OrderSelect (i, SELECT_BY_POS )) continue ; // Что-то помешало - идем к следующему
   if ( OrderSymbol () != Symbol ()) continue ;           // Чужой график
   if ( OrderType ()< 2 && OrderMagicNumber () == Magic)
  {
   if ( OrderLots ()>=lot1 && OrderProfit ()< 0 )
   {
    ticket1= OrderTicket ();
    lot1= OrderLots ();
    type= OrderType ();
    profit1= OrderProfit ();
   }
  }
 }
 for ( int i= OrdersTotal ()- 1 ; i>= 0 ; i--)
 {
   if (! OrderSelect (i, SELECT_BY_POS )) continue ; // Что-то помешало - идем к следующему
   if ( OrderSymbol () != Symbol ()) continue ;           // Чужой график
   if ( OrderType () != type && OrderType ()< 2 && OrderMagicNumber () == Magic)
  {
   if ( OrderLots () >= lot2/Multipler && OrderProfit ()> 0 && OrderLots ()>lot1)
   {
    ticket2 = OrderTicket ();
    lot2 = OrderLots ();
    profit2= OrderProfit ();
   }
  }
 }
 if ((profit1+profit2)> 0 && lot1<lot2)
 {
   while (! RefreshRates ());
   if (ticket1)
  {
   if ( OrderSelect (ticket1, SELECT_BY_TICKET ))
   res1=OrderCloseX(ticket1,lot1);
  }
   if (ticket2)
  {
   if ( OrderSelect (ticket2, SELECT_BY_TICKET ))
   res2=OrderCloseX(ticket2,lot2);
  }
   if (res1 && res2)
   DeletePos();
 }
}