초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 722

 
Alexey Viktorov :
네, 정말... 그런 브로커는 어디에서 찾을 수 있나요... 링크를 공유할 수 있습니까?
모든 것이 바로 여기에 있습니다. 입찰에 매수 마감
 
부주의에 대해 사과드립니다. 나는 "열다"라고 읽었습니다 ...
 

좋은 시간,

문제:

구매 보류 중인 주문을 넣을 수 없는 이유를 알려주세요.

request.price =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+(오프셋)*포인트;

오프셋 = 1 에서 탈락 오류 :

  0.10 AUDNZD.m에서 1.03748 [유효하지 않은 가격] , t 에서 구매 중지 실패 . 전자 . 작은 수준 가격 ( 에서 나의 것 경우 )

 

때, 그 바로 뒤에 "집행 명령"을 배치할 때

request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK)

모든 것이 잘 작동합니다(즉, 주문이 완료됨):

1.03747 에서 0.10을 구매한 주문 [#2 1.03747에서 0.10AUDNZD.m 구매]

보류 중인 주문 ( 1.03748 )수락 되지 않는 이유는 무엇입니까? 1.03747에서 - 설정하고 1.03748에서 - 작은 값? (결국 , SYMBOL_ASK 는 스프레드를 고려하고 오프셋 - 주문을 하기 위한 현재 가격으로부터의 오프셋은 포인트로 1만큼 증가합니다.)

그러나 offset= 100 인 경우: 주문 보류 BUY_STOP 가격 = 1.03847 – 이미 작동 중


고맙습니다.
 
Konstantin_78 :

좋은 시간,

문제:

보류 중인 주문을 구매할 수 없는 이유를 알려주세요.

request.price =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+(오프셋)*포인트;

오프셋 = 1 에서 탈락 오류 :

  0.10 AUDNZD.m at 1.03748 [Invalid price] , 즉 낮은 가격 수준(내 경우)

 

그 직후에 설정할 때 "실행 명령"

request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK)

모든 것이 잘 작동합니다(즉, 주문이 완료됨):

1.03747 에서 0.10을 매수한 주문 [#2 1.03747에서 0.10AUDNZD.m 매수]

보류 중인 주문 ( 1.03748 )수락 되지 않는 이유는 무엇입니까? 1.03747에서 - 설정하고 1.03748에서 - 작은 값?

그러나 offset= 100 인 경우: 주문 보류 BUY_STOP 가격 = 1.03847 – 이미 작동 중


고맙습니다.

당신은 당신 자신의 질문에 답했습니다.

현재 가격에서 보류 주문 가격까지의 최소 요구 거리와 같은 stoplevel 매개 변수가 있습니다. 각 상품에는 고유한 가치가 있으며 거래 조건에서 설정됩니다.

 
Andrey F. Zelinsky :

Вы же сами и ответили на свой вопрос.

Есть такой параметр stoplevel -- минимально необходимое расстояние от текущей цены до цены установки отложенного ордера -- для каждого инструмента своё значение и задаётся в торговых условиях 

그러면 다음이 사실이 됩니다.

가격 =SymbolInfoDouble(Symbol(),SYMBOL_ASK)+SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL)*포인트

하지만 "... 현재 가격에서"라고 썼다면 스프레드가 그것과 어떤 관련이 있습니까? 이는 SYMBOL_ASK에 포함됩니다(SYMBOL_ASK = 시가 + 스프레드).

 
Vladimir Karputov :

나는 당신을 돕기 위해 예를 첨부했습니다 ...

물론, 예제가 도움이 되었습니다. 고맙습니다.


이제 그런 질문입니다.

로트를 늘릴 때 어느 시점에서 무료 자금이 거의 없으며 증가 된 로트로 열어야합니다.

즉, FreeMargin이 허용하는 최대 로트로 입력하십시오.

그러한 조건을 작성하는 방법 : 계산된 로트를 사용하여 포지션을 개설 할 자금이 충분하지 않은 경우 함수는 포지션을 여는 데 가능한 최대 로트를 반환해야 합니다.

double LotA()
{
   double Lot=FirstLot;

   if (DoublingCount<= 0 ) return Lot;
   double MaxLot= SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MAX );
   double MainLot= SymbolInfoDouble ( _Symbol , SYMBOL_VOLUME_MIN );
if (Lot<MainLot)Lot=MainLot;
     if (Lot>MaxLot)Lot=MaxLot;
   double lt1=Lot;
   HistorySelect ( 0 , TimeCurrent ());
   if ( HistoryOrdersTotal ()== 0 ) return (Lot);
   double cl= HistoryOrderGetDouble ( HistoryOrderGetTicket ( HistoryOrdersTotal ()- 1 ), ORDER_PRICE_OPEN );
   double op= HistoryOrderGetDouble ( HistoryOrderGetTicket ( HistoryOrdersTotal ()- 2 ), ORDER_PRICE_OPEN );

   long typeor= HistoryOrderGetInteger ( HistoryOrderGetTicket ( HistoryOrdersTotal ()- 2 ), ORDER_TYPE );
   if (typeor== ORDER_TYPE_BUY )
     {
       if (op>cl)
        {
         if (ud<DoublingCount)
           {
            lt1= HistoryOrderGetDouble ( HistoryOrderGetTicket ( HistoryOrdersTotal ()- 2 ), ORDER_VOLUME_INITIAL )*_C_;
            ud++;
           }
         else ud= 0 ;
        }
       else ud= 0 ;
     }
   if (typeor== ORDER_TYPE_SELL )
     {
       if (cl>op)
        {
         if (ud<DoublingCount)
           {
            lt1= HistoryOrderGetDouble ( HistoryOrderGetTicket ( HistoryOrdersTotal ()- 2 ), ORDER_VOLUME_INITIAL )*_C_;
            ud++;
           }
         else ud= 0 ;
        }
       else ud= 0 ;
     }
   if (lt1>MaxLot)lt1=MaxLot;
   lt1=LotCheck(lt1);
   return (lt1);
  }
//+------------------------------------------------------------------+}
 
Marina Korotkih :

물론, 예제가 도움이 되었습니다. 고맙습니다.


이제 그런 질문입니다.

로트를 늘릴 때 어느 시점에서 무료 자금이 거의 없으며 증가 된 로트로 열어야합니다.

즉, FreeMargin이 허용하는 최대 로트로 입력하십시오.

그러한 조건을 작성하는 방법 : 계산된 로트를 사용하여 포지션을 개설 할 자금이 충분하지 않은 경우 함수는 포지션을 여는 데 가능한 최대 로트를 반환해야 합니다.

               

double Mgn,Lot=0,BID,ASK;

    BID=SymbolInfoDouble(_Symbol,SYMBOL_BID);
    ASK=SymbolInfoDouble(_Symbol,SYMBOL_ASK);

    if ( OrderCalcMargin ( ORDER_TYPE_BUY , _Symbol , 1 ,ASK,Mgn)== true )Lot= AccountInfoDouble ( ACCOUNT_MARGIN_FREE )/Mgn;

   if(OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,1,BID,Mgn)==true)Lot= AccountInfoDouble ( ACCOUNT_MARGIN_FREE )/Mgn;
                        

마리나, 아마 그럴까요?

두 가지 계산 옵션을 적용합니다. 하나는 SELL 시작용이고 다른 하나는 BUY 시작용입니다.

 
Renat Akhtyamov :

                   if ( OrderCalcMargin ( ORDER_TYPE_BUY , _Symbol , 1 ,ASK,Mgn)== true )Lot= AccountInfoDouble ( ACCOUNT_MARGIN_FREE )/Mgn;

                  if(OrderCalcMargin(ORDER_TYPE_SELL,_Symbol,1,BID,Mgn)==true)Lot= AccountInfoDouble ( ACCOUNT_MARGIN_FREE )/Mgn;
                        

마리나, 아마도 ?

아니, 그렇지 않습니다.

최소 로트가 0.01이고 마진이 0.009만 열 수 있는 상황이 발생할 수 있기 때문에 가능한 최대 로트를 계산할 뿐만 아니라 최소 허용 로트에 대해 전체를 확인해야 합니다. 결코 수락되지 않을 요청이 있는 서버, 그러나 귀하를 위한 조치는 수락될 수 있음)

 
Vitaly Muzichenko :

아니, 그렇지 않습니다.

최소 로트가 0.01이고 마진이 0.009만 열 수 있는 상황이 발생할 수 있기 때문에 가능한 최대 로트를 계산할 뿐만 아니라 최소 허용 로트에 대해 전체를 확인해야 합니다. 결코 수락되지 않을 요청이 있는 서버, 그러나 귀하를 위한 조치는 수락될 수 있음)

전체 코드를 작성해야 하듯이, 글쎄요, 동시에 살펴보겠습니다....?

이제 나는 항상 당신에게서 배우고 답이 가득 차도록 당신을 돌볼 것입니다.

나는 한 번 기술 감독으로 일했습니다. 걱정하지 마십시오. 모든 것이 괜찮을 것입니다!

함께 우리는 팀입니다!

 
Marina Korotkih :

물론, 예제가 도움이 되었습니다. 고맙습니다.


이제 그런 질문입니다.

로트를 늘릴 때 어느 시점에서 무료 자금이 거의 없으며 증가 된 로트로 열어야합니다.

즉, FreeMargin이 허용하는 최대 로트로 입력하십시오.

그러한 조건을 작성하는 방법 : 계산된 로트를 사용하여 포지션을 개설 할 자금이 충분하지 않은 경우 함수는 포지션을 여는 데 가능한 최대 로트를 반환해야 합니다.


당신은 미끄러운 길에 있습니다.