전문 고문 - 기타 질문 - 페이지 11

 
Max Enrik :

아래 코드는 당신이 나를 도운 후에 완벽하게 작동합니다. 감사합니다.

그리고 나는 당신이 말한대로 이름을 바꿨습니다. 잘 작동하지만 궁금한 점이 있습니다 . 내가 뭔가 잘못하고 있습니까?
(그냥 걱정 된다)

코드가 작동할지 걱정하는 것은 매우 정상적입니다(실제로는 정상입니다). 종종 우리는 컴파일되지만 우리가 원하는 것을 하지 않는 코드를 보게 될 것입니다(사람의 실수 및/또는 지식 부족으로 인해).

가장 좋은 방법은 변수를 출력하고 리턴 코드를 확인 하는 습관을 들이는 것입니다. 테스트를 마치면 인쇄 문을 제거할 수 있습니다.

위의 코드 조각을 사용하여 간단한 Print("SL 값: "+sl)을 추가한 다음 전문가 로그를 확인하여 값이 예상한 값인지 확인할 수 있습니다.

 
Max Enrik : 그냥 궁금해서요. 제가 뭔가 잘못하고 있는 건가요?
    { sl = Bid + points_to_change( stoploss * 10 ); }
왜 10을 곱합니까? stoploss 가 pips에 있는 경우 pips_to_change 를 통해 변환하여 4자리 브로커에서 작동하도록 합니다.
 
Marco vd Heijden :
설계된대로 작동하면 아무 잘못도하지 않는 것이 간단합니다. 그렇지 않으면 단순히 작동하지 않습니다.

#확인 표시 - 닫힘

응! 나는 이 비트맵 레이블 이 이미 나에게 오랜 시간이 걸렸다는 것을 인정합니다. 드디어 내가 원하는 것을 얻었다...
물론, 거대한 사람, 당신의 도움에 감사드립니다.

아래 코드와 같이 내 문제를 해결합니다.

void ordersell()
{
     //  Sell set Stop Loss with bitmap label
    
     // when bitmap label shows - ON
     if ( ObjectGetInteger ( 0 , "bitmap label on off" , OBJPROP_STATE ) == true )
    {
        sl = Bid + points_to_change( stoploss * 10 );
         Print ( " | TRUE :  Active | " , "Bid: " , Bid , " | " , "Stop Loss: " , sl );
    }

     // when bitmap label shows - OFF
     if ( ObjectGetInteger ( 0 , "bitmap label on off" , OBJPROP_STATE ) == false )
    {
        sl = 0 ;
         Print ( " | FALSE :  Inactive | " , "Bid: " , Bid , " | " , "Stop Loss: " , sl );
    }

     // call your stop loss 'sl'
    ticket = OrderSend ( ..., sl, ... );
     // sounds
     if ( ticket > 0 )
    { PlaySound ( "ok.wav"       ); } else
    { PlaySound ( "timeout.wav" ); }
     return ;
}
 
honest_knave :

가장 좋은 방법은 변수를 출력하고 리턴 코드를 확인하는 습관을 들이는 것입니다. 테스트를 마치면 인쇄 문을 제거할 수 있습니다.
위의 코드 조각을 사용하여 간단한 Print("SL 값: "+sl)을 추가한 다음 전문가 로그를 확인하여 값이 예상한 값인지 확인할 수 있습니다.

이미 사용하고 있지만 #Checkmark 문제를 확인 하면 더 명확하게 이해하기를 바랍니다.
어쨌든 시간 내주셔서 감사합니다.

 
whroeder1 :
왜 10을 곱합니까? stoploss 가 pips에 있는 경우 pips_to_change 를 통해 변환하여 4자리 브로커에서 작동하도록 합니다.

오! 예, 좋은 질문입니다. 저는 이미 변했습니다. 관심 을 가져주셔서 감사합니다.

 

#손절매 / 이익실현 - 마감

더 명확하게 의견을 주셔서 감사합니다 Marco.
당신에게 최선을 다합니다.

@Marco vd Heijden 에게 특별한 감사

 

#Ctrl + 마우스 버튼 - 열기

나는 그것에 대한 좋은 문서를 어떻게 찾을 수 있는지 몇 시간을 보냈고 그것에 대한 좋은 정보와 문서를 얻을 수 없습니다.
Lot 크기를 0.1 로 늘리려면 ' 왼쪽 마우스 + Ctrl '을 클릭하면 됩니다. ( 일반적으로 0.01 증가 ).

이에 대한 예제가 포함된 문서 및 기사를 찾고 싶습니다.

미리 감사드립니다.

 
Max Enrik :

#Ctrl + 마우스 버튼 - 열기

나는 그것에 대한 좋은 문서를 어떻게 찾을 수 있는지 몇 시간을 보냈고 그것에 대한 좋은 정보와 문서를 얻을 수 없습니다.
Lot 크기를 0.1 로 늘리려면 ' 왼쪽 마우스 + Ctrl '을 클릭하면 됩니다. ( 일반적으로 0.01 증가 ).

이에 대한 예제가 포함된 문서 및 기사를 찾고 싶습니다.

미리 감사드립니다.

키 조합을 잡는 쉬운 방법을 모르겠습니다. 0.01이 아닌 0.1만큼 증가시키려면 클릭할 두 번째 버튼이 있는 것이 좋습니다.

그럼에도 불구하고 다음을 시도할 수 있습니다.

마지막 이벤트가 키 입력 CTRL인지 확인하십시오 .

그렇다면 이 이벤트가 마우스 클릭인지 확인하십시오.

그러나 이 접근 방식에는 몇 가지 문제가 있습니다.

1. 키 입력과 마우스 클릭 사이에 다른 차트 이벤트가 발생하면 실패합니다.

2. 마우스 클릭과 CTRL 해제 사이의 지연으로 인해 약간의 오버런이 발생합니다. 이에 대한 해결 방법은 자체 문제를 소개합니다.

아마도 다른 사람들이 더 나은 아이디어를 가지고 있을 것입니다.

#define CTRL 17

void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
  {
   static bool wasCTRL= false ;
   if (wasCTRL && id== CHARTEVENT_CLICK ) Print ( "CTRL+CLICK detected" );
   wasCTRL=(id== CHARTEVENT_KEYDOWN && lparam==CTRL);
  }
 
//+------------------------------------------------------------------+
//|                                                      keydown.mq4 |
//|      Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, Marco vd Heijden, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

bool ctrl_click;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(60);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---

  }
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {

   if(id==CHARTEVENT_CLICK)
     {
      //Print("CLICK");
      ctrl_click=1;
     }

   if(id==CHARTEVENT_KEYDOWN)
     {
      //Print(lparam);// print to identify keycode

      if(lparam==17)  // ctrl key
        {
         if(ctrl_click==1)// if mouse click
           {
            //Do Something when CTRL (keycode 17) is pressed
            Print("CTRL+CLICK");
            ctrl_click=0;  // reset
           }
        }
       ctrl_click=0; // reset if not ctrl
     }
  }
//+------------------------------------------------------------------+
 

그럴 것 같아요.

약간 다릅니다.