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

 
Ivan Butko :

추가해야 할 조건이나 구현 방법(쉬운 경우)을 알고 계시다면 공유 부탁드립니다.

할 수는 있지만 어떻게 작동하는지 확인하는 것이 흥미롭지 않아 스케치했습니다.

 void OnTick ()
{   static int ticket = - 1 ;
   while (! IsStopped () &&ticket< 0 )
   {   if ( TerminalInfoInteger ( TERMINAL_CONNECTED ) && TerminalInfoInteger ( TERMINAL_TRADE_ALLOWED ) && !IsTradeContextBusy())
      {  
         RefreshRates();
         ticket = OrderSend ( "EURUSD" , OP_SELL, 0.01 , Bid, 3 , 0 , 0 , "" , 0 , 0 , clrRed );
         if (ticket > 0 ) break ; 
      }
   Sleep ( 123 ); 
   }
}
 
Igor Makanu :

할 수는 있지만 어떻게 작동하는지 확인하는 것이 흥미롭지 않아 스케치했습니다.

이고르, 고마워. 물론 나 자신도 확인할 필요가 없습니다.

그리고 진드기를 기다리지 않고 어떻게 든 가능합니까?

"푸시"를 누르면 열기 요청이 즉시 진행됩니다.

이것이 바로 거래를 신속하게 개시하기 위한 "매수/매도" 터미널에서 버튼이 표준인 방식입니다(차트의 왼쪽 상단). 그것을 누르면 셀카가 즉시 열립니다. 필요한 것은 틱을 기다리지 않고 한 번의 거래 대신 주문 바구니가 열리기만 하면 됩니다.

두 가지 구현이 나타납니다(내가 보기에).
1) 장바구니를 여는 차트의 버튼(유사)
2) 고문 중 하나. Expert Advisor는 내가 할 수 있는 것보다 더 빨리(문제가 있는 경우) 개설 요청을 반복할 수 있기 때문에 나에게 더 편리한 것 같습니다.



UPD

코드가 작동하고 새 틱에서 열립니다. 멋지네요. 감사합니다)


UPD

나는 또한 기억했다 : 복사기에는 "ms"매개 변수가 있으며 검사 시간을 설정할 수 있습니다. 마스터가 거래를 열면 거의 1ms부터 슬레이브가 거래 개설 요청을 제출할 수 있습니다. 즉, 즉석개방이 가능하다.

 
Igor Makanu :

할 수는 있지만 어떻게 작동하는지 확인하는 것이 흥미롭지 않아 스케치했습니다.

이고르, 눈으로 확인하십시오. 새 진드기를 기다리지 않고 즉시 열리는 것입니까?

int OnInit()

{

//---

정적 int 티켓 = -1;

동안(!Stopped() &&티켓<0)

{ if( TerminalInfoInteger (TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())

{

새로 고침();

티켓 = OrderSend("EURUSD", OP_SELL, 0.01, 입찰, 3, 0, 0, "", 0, 0, clrRed);

if(티켓 > 0) 휴식;

}

수면(1);

}

//---

반환(INIT_SUCCESSED);

}

------------------

그리고 그것은 의도한 대로 작동하는 것 같습니다...
 
Ivan Butko :



그리고 의도한 대로 작동하는 것 같습니다...

최선의 선택은 아닙니다 .... 적어도 그렇게 작성하십시오.

 #property strict
int ticket = - 1 ;
int OnInit ()
{   if (ticket < 0 ) SendMyOrder();
   return ( INIT_SUCCEEDED ); 
}
//+------------------------------------------------------------------+
void OnTick ()
{
   if (ticket < 0 ) SendMyOrder();
}
//+------------------------------------------------------------------+
void SendMyOrder()
{   while (! IsStopped () && ticket < 0 )
   {   if ( TerminalInfoInteger ( TERMINAL_CONNECTED ) && TerminalInfoInteger ( TERMINAL_TRADE_ALLOWED ) && !IsTradeContextBusy())
      {  RefreshRates();
         ticket = OrderSend ( "EURUSD" , OP_SELL, 0.01 , Bid, 3 , 0 , 0 , "" , 0 , 0 , clrRed );
         if (ticket > 0 ) break ; 
      }
       Sleep ( 123 ); 
   } 
}
//+------------------------------------------------------------------+

그러나 첫 번째 옵션은 차트에 올려 놓고 근무해야 한다고 생각할 때 자동 거래 버튼을 누르면 분명히 작동해야 합니다.

추신: 주문 후 어드바이저를 삭제하여 터미널이 멈추지 않도록 하려면 다음과 같이 작성하십시오.

 void OnTick ()
{
   if (ticket < 0 ) SendMyOrder();
   if (ticket > 0 ) ExpertRemove ();
}
 
Igor Makanu :

최선의 선택은 아닙니다 .... 적어도 그렇게 작성하십시오.

그러나 첫 번째 옵션은 차트에 놓고 "근무 중"이 필요하다고 생각할 때 자동 거래 버튼을 누르면 분명히 작동해야 합니다.

추신: 주문 후 어드바이저를 삭제하여 터미널이 멈추지 않도록 하려면 다음과 같이 작성하십시오.

매우 감사합니다
 

괜찮은! 변형 테스트가 계속됩니다. Vladimir와 Igor의 변종은 매우 빠른 것으로 나타났습니다. 실제로는 빠른 구매 버튼을 누르면 어드바이저보다 거래가 더 빨리 열리는 것으로 나타났습니다. 두 옵션 모두 장단점이 있습니다. 또한 어드바이저에서 열 쌍을 차례로 지정하면 차례로 차례로 매우 천천히 열립니다 ... 그리고 각 차트에 7 명의 어드바이저를 넣으면 (더 언로드 된 것처럼 보입니다), 그 반대의 경우도 마찬가지입니다. 모든 거래는 주문 사이에 지연 없이 번갈아 가며 즉시 열립니다(그러나 처음에는 여전히 0.5초의 간격이 있습니다. )

차트에 있는 버튼 을 해보고 싶은데 메뉴얼을 찾았는데 좌표등만 나와있네요. "버튼" 개체의 스크립트에서 거래를 열기 위한 코드를 등록할 위치를 알려주세요. 차트에서 클릭하면 거래가 열립니다. 표준 MT 빠른 구매/판매 버튼에서와 같습니다.

또는 Trade Panel을 업그레이드하여 주문 바구니를 여는 방법은 무엇입니까?

 
도와 주세요
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2019.10.14
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
Ivan Butko :

차트에 있는 버튼 을 해보고 싶은데 설명서를 찾았는데,

설명서는 찾아보지 않고 버튼만 그렸습니다))))

 #property copyright "IgorM"
#property link        "https://www.mql5.com/ru/users/igorm"
#property version    "1.00"
#property strict
input string    sym1 = "EURUSD" ;
input string    sym2 = "GBPUSD" ;
input string    sym3 = "USDCAD" ;
input string    sym4 = "USDJPY" ;
input string    sym5 = "AUDUSD" ;
#include <Controls\Button.mqh>
CButton ButtonSend;

string sym[ 5 ];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
   sym[ 0 ] = sym1;
   sym[ 1 ] = sym2;
   sym[ 2 ] = sym3;
   sym[ 3 ] = sym4;
   sym[ 4 ] = sym5;
   ButtonSend.Create( 0 , "ButtonSend" + _Symbol , 0 , 10 , 50 , 100 , 90 );
   ButtonSend.Color( clrRed );
   ButtonSend.Text( "Kill Forex!" );
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit ( const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick ()
  {
   static int ticket[ 5 ] = {- 1 , - 1 , - 1 , - 1 , - 1 };
   if (ticket[ 0 ] > 0 && ticket[ 1 ] > 0 && ticket[ 2 ] > 0 && ticket[ 3 ] > 0 && ticket[ 4 ] > 0 ) return ;
   if (ButtonSend.Pressed())
     {
      ButtonSend.Pressed( false );
       Print ( "Start OrderSend()" );
       while (! IsStopped ())
        {
         if ( TerminalInfoInteger ( TERMINAL_CONNECTED ) && TerminalInfoInteger ( TERMINAL_TRADE_ALLOWED ) && !IsTradeContextBusy())
           {
            RefreshRates();
             for ( int i = 0 ; i < 5 ; i++)
              {
               if (sym[i] == "" ) ticket[i] = INT_MAX ;
               if (ticket[i] > 0 ) continue ;
               ticket[i] = OrderSend (sym[i], OP_SELL, 0.01 , SymbolInfoDouble (sym[i], SYMBOL_BID ), 3 , 0 , 0 , "" , 0 , 0 , clrRed );
              }
           }
         if (ticket[ 0 ] > 0 && ticket[ 1 ] > 0 && ticket[ 2 ] > 0 && ticket[ 3 ] > 0 && ticket[ 4 ] > 0 )   break ;
         Sleep ( 123 );
        }
     }
  }
//+------------------------------------------------------------------+

기호 설정에 ""가 있으면 이 기호에 대해 0.01랏을 열지 않습니다. 내가 로트를 설정하지 않았습니다. 가르치는 방법에 대한 주제와 같기 때문에 누가 그것을 할 것인지 찾는 것이 아니라 시도하십시오. 필요한 경우 나사를 조이십시오.)

 
Igor Makanu :

설명서는 찾아보지 않고 버튼만 그렸습니다))))

기호 설정에 ""가 있으면 이 기호에 대해 0.01랏을 열지 않습니다. 내가 로트를 설정하지 않았습니다. 가르치는 방법에 대한 주제와 같기 때문에 누가 그것을 할 것인지 찾는 것이 아니라 시도하십시오. 필요한 경우 나사로 조이십시오.)

정말 감사합니다, 이고르! 신속하고 요점으로

나는 시도 할 것이다

 
Igor Makanu :

하나의 Expert Advisor에서 시간 간격으로 지정된 각 통화 쌍에 대해 하나씩 거래를 시작하면 이상합니다. 그리고 다른 통화쌍(symbol(0))으로 5개의 다른 차트에 베팅할 때 자동 거래를 클릭하면 5개의 거래가 모두 동시에 즉시 열립니다.

무엇이 가능하고 어떻게 고칠 수 있는지 알려주실 수 있습니까? 모든 것이 하나의 어드바이저와 하나 의 차트에 있도록(차트의 버튼 이 원래 버전에서와 같이 여러 어드바이저와 "자동 거래"를 활성화할 때처럼 빠르게 모든 쌍을 열 수 있도록)

사유: