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

 
Lerchik :

즉, Ask에서 시장가 주문을 여는 것이 BuyLimit 주문을 여는 것과 같다고 말하고 싶습니다.

문제가 있습니다. 이제 입찰가가 1.4500이라고 가정해 보겠습니다. 그래서 시장에서 매수 주문을 열면 매도호가에서 오를 것이고 매도호가에서 매도할 것입니다. 예를 들어 10포인트를 가정해 봅시다.

그러면 주문은 1.4510 상승할 것입니다.

이제 BuyLimit 주문은 1.4500과 같습니다. 그리고 가격은 보류 가격보다 10포인트 낮은 가격으로 Ask에서 주문을 엽니다. 입찰이 아니라 묻습니다.

조금 자라지 않습니다. 그것들은 다른 것이고 그렇게 비교할 수 없습니다.

어쩌면 내가 틀렸어?

모든 매수 주문 은 Ask에 의해 열리고 Bid에 의해 마감되며, 그 반대의 경우도 마찬가지입니다.

읽기에 너무 게으르면 데모 계정을 열고 연습하십시오.

 
Сергей Таболин :

처음에는 문서에 대해 잘 알고 있습니까?

문서에 있는 내용은 다음과 같습니다.

대기 중인 주문  

미결주문은 증권회사가 미래에 특정한 조건으로 금융상품을 사고팔도록 하는 주문이다. 보류 중인 주문에는 다음 유형이 있습니다.

  • 구매 한도   — 주문에 명시된 가격과 같거나 낮은 "매도" 가격으로 매수하는 거래 주문. 이 경우 현재 가격 수준은 주문에 설정된 값보다 높습니다. 일반적으로 이러한 유형의 주문은 특정 수준까지 하락한 상품 가격이 상승하기 시작할 것이라는 예상으로 이루어집니다.

그러나 나는 여기에 쓰여진 것과 그것이 어떻게 작동하는지 이해하지 못합니다.

즉, 가격이 구매 한도 아래로 떨어지고 매도가 주문을 엽니다. 그러나 동시에 같은 가격 또는 더 높은 가격으로 주문이 열릴 것입니까?

결국 이것에 대한 예는 어디에도 없습니다. 규칙만 있을 뿐입니다. 그리고 여기 아무도 설명하고 싶어하지 않습니다.

여기 내가 달성하려는 것이 있습니다.

 
Lerchik :

문서에 있는 내용은 다음과 같습니다.

대기 중인 주문  

미결주문은 증권회사가 미래에 특정한 조건으로 금융상품을 사고팔도록 하는 주문이다. 다음 유형의 보류 중인 주문이 있습니다.

  • 구매 한도   — 주문에 명시된 가격과 같거나 낮은 "매도" 가격으로 매수하는 거래 주문. 이 경우 현재 가격 수준은 주문에 설정된 값보다 높습니다. 일반적으로 이러한 유형의 주문은 특정 수준까지 하락한 상품 가격이 상승하기 시작할 것이라는 예상으로 이루어집니다.

그러나 나는 여기에 쓰여진 것과 그것이 어떻게 작동하는지 이해하지 못합니다.

즉, 가격이 구매 한도 아래로 떨어지고 매도가 주문을 엽니다. 그러나 동시에 같은 가격 또는 더 높은 가격으로 주문이 열릴 것입니까?

결국 이것에 대한 예는 어디에도 없습니다. 규칙만 있을 뿐입니다. 그리고 여기 아무도 설명하고 싶어하지 않습니다.

여기 내가 달성하려는 것이 있습니다.

BuyLimit은 Ask 가격 아래에서만 설정할 수 있습니다. SellLimit은 입찰가 이상으로만 설정할 수 있습니다.

BuyStop은 Ask 가격 이상에서만 설정할 수 있습니다. SellStop은 입찰 가격 아래에서만 설정할 수 있습니다.

해당 가격이 해당 주문에 도달하면 활성화되어 해당 위치가 생성됩니다.

 
Lerchik :

문서에 있는 내용은 다음과 같습니다.

대기 중인 주문  

미결주문은 증권회사가 미래에 특정한 조건으로 금융상품을 사고팔도록 하는 주문이다. 보류 중인 주문에는 다음 유형이 있습니다.

  • 구매 한도   — 주문에 명시된 가격과 같거나 낮은 "매도" 가격으로 매수하는 거래 주문. 이 경우 현재 가격 수준은 주문에 설정된 값보다 높습니다. 일반적으로 이러한 유형의 주문은 특정 수준까지 하락한 상품 가격이 상승하기 시작할 것이라는 예상으로 이루어집니다.

그러나 나는 여기에 쓰여진 것과 그것이 어떻게 작동하는지 이해하지 못합니다.

즉, 가격이 구매 한도 아래로 떨어지고 매도가 주문을 엽니다. 그러나 동시에 같은 가격 또는 더 높은 가격으로 주문이 열릴 것입니까?

결국 이것에 대한 예는 어디에도 없습니다. 규칙만 있을 뿐입니다. 그리고 여기 아무도 설명하고 싶어하지 않습니다.

여기 내가 달성하려는 것이 있습니다.

데모 계정을 열고 연습하십시오.

매수 제한 은 현재 매도 가격 아래 로 설정되며 매도 가 내려갈 때 열립니다.

Buy Stop 은 현재 Ask 가격 보다 높게 설정되어 Ask가 상승 하면 열립니다.

매수는 현재 매도 호가에서 열립니다.

 
MakarFX :

데모 계정을 열고 연습하십시오.

매수 제한 은 현재 매도 가격 아래 로 설정되며 매도 가 내려갈 때 열립니다.

Buy Stop 은 현재 Ask 가격 보다 높게 설정되어 Ask가 상승 하면 열립니다.

매수는 현재 매도 호가에서 열립니다.

적어도 뭔가.

더 가자...

음, 입찰 가격이 정리 가격 아래로 떨어졌고 요청이 주문을 열었습니다. 그러나 주문 가격은 주문에 설정된 것과 동일하게 유지됩니까 아니면 다를까요?

 
Lerchik :

적어도 뭔가.

더 가자...

음, 입찰 가격이 정리 가격 아래로 떨어졌고 요청이 주문을 열었습니다. 그러나 주문 가격은 주문에 설정된 것과 동일하게 유지됩니까 아니면 다를까요?

1 매도호가가 보류가로 하락해야 합니다.

2 가격이 남아 있습니다.

 
MakarFX :

1 매도호가가 보류가로 하락해야 합니다.

2 가격이 남아 있습니다.

많은 설명 감사합니다.

그리고는 이미 머리를 다쳤는데, 왜 내가 원하는 방식으로 할 수 없는지.

 

좋은 오후에요 여러분.

이전 질문에 대한 답변에서 이해한 한 - 주문을 열 때 발생할 수 있는 오류 처리만 수행하면 됩니다. 이것이 첫 번째입니다. 두 번째로, 오류가 발생할 경우 매 틱마다 어드바이저가 서버를 망치지 않도록 해야 합니다.

첫 번째 질문 - 오류 처리가 어떻게 수행되는지 알려주십시오.

두 번째 질문은 서버 가우징으로부터 자신을 보호하는 방법입니다.

이렇게 거래가 열립니다.

   /*УСЛОВИЕ 1*/
   if (flag_screen1==en_vbIkl_screen1 &&flag_screen2==en_vbIkl_screen2)
   { // НАЧАЛО УСЛОВИЕ 1
   if (ao_buy!= EMPTY_VALUE && count_orders_market_buy == 0 )
   {
     if ( OrderSend ( Symbol (),OP_BUY,lot,Ask,slippages,Bid-sl,Bid+tp ,comment_ao_market_buy)) Print ( "Buy Open" ); // ОТКРЫВАЕМ БАЙ ОРДЕР
   }
   } // КОНЕЦ УСЛОВИЕ1

// И ОТЛОЖКИ ВОТ ТАК

   /*УСЛОВИЕ 1*/
   if (flag_screen1==en_vbIkl_screen1 &&flag_screen2==en_vbIkl_screen2)
   { // НАЧАЛО УСЛОВИЕ 1
   
   if (ao_buy!= EMPTY_VALUE && count_orders_stop_buy == 0 && max_Price>Bid)
   { //НАЧАЛО ПРОВЕРКИ УСЛОВИЯ 1 НА ОТКРЫТИЕ
   
   Print ( "БАЙ СТОП AO УСЛОВИЕ 1" );
         if ( OrderSend ( Symbol (),OP_BUYSTOP,lot,max_Price,slippages,max_Price-sl,max_Price+tp ,comment_ao_otloj_buy,Magik_number, TimeCurrent ()+order_life_time)) Print ( "BUY_STOP OPEN" ); // ОТКРЫВАЕМ ОТЛОЖЕННЫЙ БАЙ ОРДЕР
   
   }   //КОНЕЦ ПРОВЕРКИ УСЛОВИЯ 1 НА ОТКРЫТИЕ
   } // КОНЕЦ УСЛОВИЕ1



변동 계정 시장 매수는 다음과 같은 함수를 사용하여 계산됩니다.

         void data_orders( string comment= "alt" , int magik_number= 123 )
              {
         int I = 0 ;
   count_orders_all = 0 ;   //КОЛИЧЕСТВО ВСЕХ УСТАНОВЛЕННЫХ ОРДЕРОВ
   count_orders_market_all = 0 ; //КОЛИЧСТВО ВСЕХ РЫНОЧНЫХ ОРДЕРОВ
   count_orders_market_buy = 0 ;
   
   count_orders_stop_buy = 0 ;     //КОЛИЧЕСТВО СТОП БАЕВ
   count_orders_limit_buy = 0 ;   // КОЛИЧЕСТВО ЛИМИТ БАЕВ
   
   count_orders_stop_sell = 0 ;     //КОЛИЧЕСТВО СТОП СЕЛОВ
   count_orders_limit_sell = 0 ;   //КОЛИЧЕСТВО ЛИМИТ СЕЛОВ
   
   
  lot_orders_buy = 0 ;     //ОБЪЁМ ЛОТА ПО БАЙ ОРДЕРАМ
         lot_orders_sell = 0 ;       //ОБЪЁМ ЛОТА ПО СЕЛЛ ОРДЕРАМ
         balance_all = 0 ;           // БАЛАНС ПО ВСЕМ ОРДЕРАМ
         balance_buy = 0 ;         // БАЛАНС ПО ОРДЕРАМ БАЙ
         balance_sell = 0 ;         // БАЛАНС ПО ОРДЕРАМ СЕЛЛ
         
         
         
           for ( int i = 0 ; i <= OrdersTotal ();i ++) // перебор всех ордеров в цикле
          {
  
   if ( OrderSelect (I , SELECT_BY_POS, MODE_TRADES)) // выбираем ордер по переменной цикла
   {
     if (OrderMagicNumber() != magik_number || OrderSymbol() != Symbol ()) // если ордер не нашь то
    {
     continue ; // переходим на следующую итерацию
    
    }
     if (comment== OrderComment() || comment== "alt" ) // если коментарий нашь то 
    {
    count_orders_all+= 1 ;
     if (OrderType()== OP_BUY)
    {
    count_orders_market_all+= 1 ;
    count_orders_market_buy+= 1 ;
    }
     if (OrderType()== OP_SELL)
    {
    count_orders_market_all+= 1 ;
    count_orders_market_sell+= 1 ;
    }
     if (OrderType()== OP_BUYSTOP)
    {
    count_orders_stop_buy+= 1 ;
    }
     if (OrderType()== OP_BUYLIMIT)
    {
    count_orders_limit_buy+= 1 ;
    
    }
     if (OrderType()== OP_SELLSTOP)
    {
    count_orders_stop_sell+= 1 ;
    
    }
     if (OrderType()== OP_SELLLIMIT)
    {
    count_orders_limit_sell+= 1 ;
    
    }
    
    
    
    }
         
         
              }
              }
              }

작성하십시오 - 오류를 올바르게 처리하는 방법과 오류가 발생할 때 매 틱마다 서버에 점수를 매기는 것을 피하는 방법은 무엇입니까?

 
DanilaMactep :

좋은 오후에요 여러분.

작성하십시오 - 오류를 올바르게 처리하는 방법과 오류가 발생할 때 모든 틱에서 서버 점수를 피하는 방법은 무엇입니까?
 if ( GetLastError ()== 141 ){ Alert ( GetLastError ()); ExpertRemove ();}
 
MakarFX :

그리고 이것은 order send를 사용하여 주문을 열려고 하는 시도가 있는 각 줄 뒤에 쓰여져야 합니다, 맞죠?

하지만 질문이 있습니다. 전문가 제거 프로그램이 내 조언자를 차트에서 제거한 경우 차트에 자동으로 다시 첨부하고 계속 작업하도록 하려면 어떻게 해야 합니까? 이 경우의 전체 본질( 오류 141 )을 더 자세히 설명할 수 있습니까? 요청이 너무 많습니다. 글쎄요, 요청이 많으면 차트에서 Expert Advisor를 제거하고 아침에 일어날 때까지 기다려야 할 것이 있습니다. 모든 것을 다시 실행하고 컴퓨터로 와서 Expert Advisor를 차트에 다시 올리십시오 O_o?