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

 

수학에 문제가 없었다는 것이 어떻게 가능합니까?

 input double     T_P  = 0.81 ;
input double     S_L  = 0.35 ;

b_ep=price-atrH1200;
b_sl=b_ep-(b_ep*S_L)/ 100 ;
b_tp=b_ep+(b_ep*T_P)/ 100 ;

1.05 * 0.81/100 = 0.008505 와 같이

A는 0.81% 및 0.35% 대신 35% 스탑 및 81% 기술 이익을 제공합니다.

SellLimit(LOT_FOR_TRADE,s_ep,symb,s_sl,s_tp, ORDER_TIME_DAY , 0 , "SellLimit" );

BuyLimit(LOT_FOR_TRADE,b_ep,symb,b_sl,b_tp,ORDER_TIME_DAY,0,"BuyLimit");

표준 라이브러리 SellLimit& BuyLimit 의 메서드


 Print (s_ep, "s_ep" );
Print (s_sl, "s_sl" );
Print (s_tp, "s_tp" );

인쇄 쇼:

2017.12.24 07:55:27.559 2017.01.03 16:54:17 1.04236745s_ep

2017.12.24 07:55:27.559 2017.01.03 16:54:17 1.25084094s_sl

2017.12.24 07:55:27.559 2017.01.03 16:54:17 0.521183725s_tp


 
SILVERPRINT :

수학에 문제가 없었다는 것이 어떻게 가능합니까?

1.05 * 0.81/100 = 0.008505 와 같이

그리고 0.81% 및 0.35% 대신 35% 스탑 및 81% 기술 이익을 제공합니다.

표준 라이브러리 SellLimit& BuyLimit 의 메서드


인쇄 쇼:

2017.12.24 07:55:27.559 2017.01.03 16:54:17 1.04236745s_ep

2017.12.24 07:55:27.559 2017.01.03 16:54:17 1.25084094s_sl

2017.12.24 07:55:27.559 2017.01.03 16:54:17 0.521183725s_tp



동일한 코드를 다시 작성하되 모든 변수가 선언되도록 합니다. 어떤 유형의 변수를 선언하는지 보겠습니다. 그리고 올바른 결정을 내리기 위해서는 이미 돌을 던질 수 있습니다.

 
Vladimir Karputov :

동일한 코드를 다시 작성하되 모든 변수가 선언되도록 합니다. 어떤 유형의 변수를 선언하는지 보겠습니다. 그리고 올바른 결정을 내리기 위해서는 이미 돌을 던질 수 있습니다.


//+------------------------------------------------------------------+
//|                                                       |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
#include <Indicators\Trend.mqh>
#include <Indicators\Oscilators.mqh>
#include <Indicators\TimeSeries.mqh>
#include <Trade\Trade.mqh>
input double    T_P  =0.81;
input double    S_L  =0.35;
static int hour;
int h;
input int TIME_FOR_ACTION=16;
input int slowma=200;
input int fastwma=20;
input int mahours=20;
input double LOT_FOR_TRADE=0.1;
string symb;
MqlTick infotick;
MqlDateTime currentTime;
CiMA ValueofMA200;
CiMA ValueofMA20;
CiMA ValueofMAHour;
CiATR atr;
CTrade T_M;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   symb=_Symbol;
   ValueofMA200.Create(symb,PERIOD_D1,slowma,0,MODE_SMA,PRICE_CLOSE);
   ValueofMA20.Create(symb,PERIOD_D1,fastwma,0,MODE_SMA,PRICE_CLOSE);
   ValueofMAHour.Create(symb,PERIOD_H1,mahours,0,MODE_SMA,PRICE_CLOSE);
   atr.Create(symb,PERIOD_H1,200);


   atr.BufferResize(40);
   ValueofMA200.BufferResize(250);
   ValueofMA20.BufferResize(250);
   ValueofMAHour.BufferResize(250);

   T_M.LogLevel(LOG_LEVEL_ALL);

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

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   RefCustom();
   SymbolInfoTick(symb,infotick);
   TimeToStruct(infotick.time,currentTime);

   if(1==1)
     {
      if(1==1)
        {
         double maD1200,maD120,maH120,atrH1200,price;

         maD1200=ValueofMA200.Main(0);
         maD120=ValueofMA20.Main(0);
         maH120=ValueofMAHour.Main(0);
         atrH1200=atr.Main(0);
         price=infotick.bid;
         double s_ep,s_sl,s_tp;
         double b_ep,b_sl,b_tp;


         if(1==1)
           {
            b_ep=price-atrH1200;
            b_sl=b_ep-(b_ep*S_L)/100;
            b_tp=b_ep+(b_ep*T_P)/100;
            T_M.BuyLimit(LOT_FOR_TRADE,b_ep,symb,b_sl,b_tp,ORDER_TIME_DAY,0,"BuyLimit");
           }
         if(1==1)
           {
            s_ep=price+atrH1200;
            s_sl=s_ep+(s_ep*S_L)/100;
            s_tp=s_ep-(s_ep*T_P)/100;

            T_M.SellLimit(LOT_FOR_TRADE,s_ep,symb,s_sl,s_tp,ORDER_TIME_DAY,0,"SellLimit");
           }
}

     }
  }
//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
//---

  }
//+------------------------------------------------------------------+
void RefCustom()
  {
   ValueofMA200.Refresh();
   ValueofMA20.Refresh();
   ValueofMAHour.Refresh();
   atr.Refresh();
  }
//+------------------------------------------------------------------+

 
SILVERPRINT :


실수. 컴파일하지 않습니다.

 
Vladimir Karputov :

실수. 컴파일하지 않습니다.


죄송합니다. 지금 시도하십시오.

 
SILVERPRINT :

죄송합니다. 지금 시도하십시오.


아마도 밤일 것입니다. 그래서 나는 당신이 무엇을 하려는지 전혀 이해하지 못합니다.

조언:

  • 선언시 INITIALIZE 변수
  • 나눌 때 int가 아닌 double로 나눕니다(예: 숫자 100.0 -> double, 숫자 100 -> int).
  • 이 스타일은 무엇입니까 if(1==1) - ? 끔찍하네요 절대 그렇게 쓰지 마세요
  • 마지막으로 가장 중요한 것은 코드에 세 줄만 남기고,

            b_ep=price-atrH1200;
            b_sl=b_ep-(b_ep*S_L)/ 100 ;
            b_tp=b_ep+(b_ep*T_P)/ 100 ;

  • 변수를 명시적으로 선언하고 초기화합니다. 예를 들면 다음과 같습니다.

   double price= 1.05848 ;
   double atrH1200= 1.05168 ;
   double T_P= 0.81 ;
   double S_L= 0.35 ;

   double b_ep=price-atrH1200;
   double b_sl=b_ep-(b_ep*S_L)/ 100.0 ;
   double b_tp=b_ep+(b_ep*T_P)/ 100.0 ;
   DebugBreak ();
 
Vladimir Karputov :

아마도 밤일 것입니다. 그래서 나는 당신이 무엇을 하려는지 전혀 이해하지 못합니다.

조언:

  • 선언할 때 INITIALIZE 변수
  • 나눌 때 int가 아닌 double로 나눕니다(예: 숫자 100.0 -> double, 숫자 100 -> int).
  • 이 스타일은 무엇입니까 if(1==1) - ? 끔찍하네요 절대 그렇게 쓰지 마세요
  • 마지막으로 가장 중요한 것은 코드에 세 줄만 남기고,

  • 변수를 명시적으로 선언하고 초기화합니다. 예를 들면 다음과 같습니다.


덕분에 큰 도움이 되었습니다.

 
이상하지만 0 이상의 주문이 있어도 기능이 작동합니다.
 if ( OrdersTotal ()== 0 )

따라서 실제로 아무 것도 변경되지 않지만 기능이 작동하지 않는 경우 전체 예금에 대해 열 수 있습니다.

 
SILVERPRINT :
이상하지만 0 이상의 주문이 있어도 기능이 작동합니다.

따라서 실제로 아무 것도 변경되지 않지만 기능이 작동하지 않는 경우 전체 예금에 대해 열 수 있습니다.

기능에 대한 MT5 도움말을 열고 MT5의 주문 내용을 이해했는지 확인하십시오.

 
F1 누르고 눌렀는데 안나오네요..

다른 캐릭터에 대해 _Digits를 정의하는 방법을 알려주실 수 있습니까?
사유: