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

 
Rustam Bikbulatov :

이 함수는 각 주문에 대해 숫자, 즉 lot*100을 씁니다.

이제 마지막으로 몇 번째 숫자인지 보여주는 역함수가 필요합니다.

시도 해봐:

 double value = StringToDouble ( ObjectGetString ( 0 ,object_name, OBJPROP_TEXT )); 

객체에 숫자가 아닌 텍스트가 포함되어 있으면 StringSubstr()을 추가해야 합니다.

 double value = StringToDouble ( StringSubstr ( ObjectGetString ( 0 ,object_name, OBJPROP_TEXT ),begin_index,length));

begin_index - 문자열의 문자 인덱스, 0부터 시작, length - 숫자 값의 길이(숫자가 차지하는 문자 수)... 제 생각에는 그렇게

 
Yevhenii Levchenko :

시도 해봐:

객체에 숫자가 아닌 텍스트가 포함되어 있으면 StringSubstr()을 추가해야 합니다.

begin_index - 문자열의 문자 인덱스, 0부터 시작, length - 숫자 값의 길이(숫자가 차지하는 문자 수)... 제 생각에는 그렇게

음, 처음에는 차트에서 이 모든 숫자를 찾아야 합니다. 그래서 그냥 작동하지 않습니다. 그게 문제 야. 이미 확인됨

 
Yevhenii Levchenko :

시도 해봐:

객체에 숫자가 아닌 텍스트가 포함되어 있으면 StringSubstr()을 추가해야 합니다.

begin_index - 문자열의 문자 인덱스, 0부터 시작, length - 숫자 값의 길이(숫자가 차지하는 문자 수)... 제 생각에는 그렇게

   bool name;
         for ( int i= 0 ; i< ObjectsTotal ( 0 , "LOTB" +OrderTicket(), OBJ_TEXT ); i++)
     {
      name = ObjectSetString ( 0 , "LOTB" +OrderTicket(), OBJ_TEXT , 0 );
       Comment ( "   " ,name); 
   }

나는 이런 일을했지만 작동하지 않습니다. 0을 보여줍니다.

 
Rustam Bikbulatov :

나는 이런 일을했지만 작동하지 않습니다. 0을 보여줍니다.

값을 설정해야 합니까 아니면 가져가야 합니까? ObjectSetString() 함수 는 텍스트 값을 설정 하고 부울 값을 반환합니다 . 이것은 아니다. 그리고 주기의 선두에서 제 생각에는 형식이 올바르게 지정되지 않았습니다. Where ObjectsTotal() ... MT4 참조에 따라 안내됩니다. 아니면 MT5 코드인가요?

 
Yevhenii Levchenko :

값을 설정해야 합니까 아니면 가져가야 합니까? ObjectSetString() 함수 는 텍스트 값을 설정 하고 부울 값을 반환합니다 . 이것은 아니다. 그리고 주기의 선두에서 제 생각에는 형식이 올바르게 지정되지 않았습니다. Where ObjectsTotal() ... MT4 참조에 따라 안내됩니다. 아니면 MT5 코드인가요?

MT4입니다

 

다시 한 번, 모두 좋은 하루!

이전에 내가 질문한 질문에 아무도 대답하지 않았지만 어쨌든 코드를 이해하는 데 도움을 요청합니다.

거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

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

미스터브루클린 , 2019.08.30 14:15

모두 좋은 하루!

다음은 Metatrader5에 대한 스크립트 코드의 일부입니다.

 #property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
//---- показывать входные параметры
#property script_show_inputs
//---
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>
CTrade         m_trade;                       // trading object
CSymbolInfo    m_symbol;                     // symbol info object
//+------------------------------------------------------------------+
//| Enum Stop or Limit                                               |
//+------------------------------------------------------------------+
enum ENUM_STOP_OR_LIMIT
  {
   stop= 0 ,     // Buy stop and Sell stop
   limit= 1      // Buy limit and Sell limit
  };
//--- input parameters
input ushort                InpUpGap          = 15 ;     // Gap for pending orders UP from the current price (in points)
input ushort                InpUpStep         = 30 ;     // Step between orders UP (in points)

input ushort                InpDownGap        = 15 ;     // Gap for pending orders DOWN from the current price (in points)
input ushort                InpDownStep       = 30 ;     // Step between orders DOWN (in points)

input ENUM_STOP_OR_LIMIT   InpPending        = stop;   // Type of pending orders

input uchar                 InpUpQuantity     = 1 ;     // UP quantity orders
input uchar                 InpDownQuantity   = 1 ;     // DOWN quantity orders

input double                InpLots           = 0.01 ;   // Lots
input ushort                InpStopLoss       = 50 ;     // Stop Loss (in points)
input ushort                InpTakeProfit     = 50 ;     // Take Profit (in points)
//---
ulong                       m_slippage= 30 ;             // slippage

double                      ExtUpGap= 0.0 ;
double                      ExtUpStep= 0.0 ;

double                      ExtDownGap= 0.0 ;
double                      ExtDownStep= 0.0 ;

double                      ExtStopLoss= 0.0 ;
double                      ExtTakeProfit= 0.0 ;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart ()
  {
//---
   if (InpLots<= 0.0 )
     {
       Print ( "The \"Lots\" can't be smaller or equal to zero" );
       return ;
     }
//---
   if (!m_symbol.Name( Symbol ())) // sets symbol name
       return ;
   if (!RefreshRates())
       return ;

   string err_text= "" ;
   if (!CheckVolumeValue(InpLots,err_text))
     {
       Print (err_text);
       return ;
     }

//---
   if (IsFillingTypeAllowed( SYMBOL_FILLING_FOK ))
      m_trade.SetTypeFilling( ORDER_FILLING_FOK );
   else
       if (IsFillingTypeAllowed( SYMBOL_FILLING_IOC ))
         m_trade.SetTypeFilling( ORDER_FILLING_IOC );
       else
         m_trade.SetTypeFilling( ORDER_FILLING_RETURN );

//---
   m_trade.SetDeviationInPoints(m_slippage);
   m_trade.SetAsyncMode( true );

//---
   ExtUpGap = m_symbol. Point () * InpUpGap;
   ExtUpStep = m_symbol. Point () * InpUpStep;

   ExtDownGap = m_symbol. Point () * InpDownGap;
   ExtDownStep = m_symbol. Point () * InpDownStep;

   ExtStopLoss = m_symbol. Point () * InpStopLoss;
   ExtTakeProfit = m_symbol. Point () * InpTakeProfit;

//--- start work
   double start_price_ask=m_symbol.Ask()-ExtUpGap;
   double start_price_bid=m_symbol.Bid()+ExtDownGap;

//--- set pending orders
   for ( int i= 0 ; i<InpUpQuantity; i++)
     {
       double price_ask = start_price_ask+i*ExtUpStep;
       double price_bid = start_price_bid+i*ExtUpStep;
       if (InpPending==stop)
        {
         double sl = (ExtStopLoss== 0.0 )   ? 0.0 : price_ask - ExtStopLoss;
         double tp = (ExtTakeProfit== 0.0 ) ? 0.0 : price_ask + ExtTakeProfit;
         m_trade.BuyStop(InpLots,m_symbol.NormalizePrice(price_ask),m_symbol.Name(),
         m_symbol.NormalizePrice(sl),
         m_symbol.NormalizePrice(tp));
        }
       else
        {
         double sl = (ExtStopLoss== 0.0 )   ? 0.0 : price_bid + ExtStopLoss;
         double tp = (ExtTakeProfit== 0.0 ) ? 0.0 : price_bid - ExtTakeProfit;
         m_trade.SellLimit(InpLots,m_symbol.NormalizePrice(price_bid),m_symbol.Name(),
         m_symbol.NormalizePrice(sl),
         m_symbol.NormalizePrice(tp));
        }
     }

   for ( int i= 0 ; i<InpDownQuantity; i++)
     {
       double price_ask = start_price_ask-i*ExtDownStep;
       double price_bid = start_price_bid-i*ExtDownStep;
       if (InpPending==limit)
        {
         double sl = (ExtStopLoss== 0.0 )   ? 0.0 : price_ask - ExtStopLoss;
         double tp = (ExtTakeProfit== 0.0 ) ? 0.0 : price_ask + ExtTakeProfit;
         m_trade.BuyLimit(m_symbol.LotsMin(),m_symbol.NormalizePrice(price_ask),m_symbol.Name(),
         m_symbol.NormalizePrice(sl),
         m_symbol.NormalizePrice(tp));
        }
       else
        {
         double sl = (ExtStopLoss== 0.0 )   ? 0.0 : price_bid + ExtStopLoss;
         double tp = (ExtTakeProfit== 0.0 ) ? 0.0 : price_bid - ExtTakeProfit;
         m_trade.SellStop(m_symbol.LotsMin(),m_symbol.NormalizePrice(price_bid),m_symbol.Name(),
         m_symbol.NormalizePrice(sl),
         m_symbol.NormalizePrice(tp));
        }
     }
  }

계획대로 스크립트는 매도 및 매수로부터 특정 거리에서 보류 중인 지정가 주문 또는 중지 주문을 설정해야 합니다. 한도 보류 주문 은 문제 없이 설정되지만 스탑 주문은 그렇지 않습니다. 구매 중지 및 판매 중지 보류 주문이 설정되지 않은 이유를 알아내도록 도와주세요.

안부 인사를 전합니다. 블라디미르.

그런 다음 한 가지 더 질문합니다. 시장이 닫힐 때(예: 주말) 스크립트를 테스트할 수 있는 방법이 있습니까?

안부 인사를 전합니다. 블라디미르.

 
Artyom Trishkin :

어떤 목록에서?

그리고 에디터에서 스타일러 를 사용하세요(Ctrl+<):

어디에서 무엇을 가져와야합니까?

말씀해 주시겠어요?

 
MrBrooklin :

다시 한 번, 모두 좋은 하루!

이전에 내가 질문한 질문에 아무도 대답하지 않았지만 어쨌든 코드를 이해하는 데 도움을 요청합니다.

그런 다음 한 가지 더 질문합니다. 시장이 닫힐 때(예: 주말) 스크립트를 테스트할 수 있는 방법이 있습니까?

안부 인사를 전합니다. 블라디미르.

아니요, 스크립트는 닫힌 시장에서 작동하지 않습니다. 주문을 하지 않습니다.

오류를 이해하려면 설정 수준을 계산하는 가격 값과 거래 주문 에 보내는 모든 가격 수준 값을 로그에 인쇄해 보십시오.

 
안녕 얘들아. 오픈 오더에 가까운 제비뽑기를 작성했습니다.
 for ( int no1= 0 ; no1< OrdersTotal (); no1++)
  {
   if ( OrderSelect (no1,SELECT_BY_POS,MODE_TRADES))
     {
       if (OrderSymbol()== Symbol () && OrderType()== OP_BUY)
        {
         ObjectCreate ( "LOTB" +OrderTicket(), OBJ_TEXT , 0 , TimeCurrent (),OrderOpenPrice());
         ObjectSetText( "LOTB" +OrderTicket(),OrderLots()* 100 , 20 , "Arial" , clrWheat );
         ObjectSetInteger ( 0 , "LOTB" +OrderTicket(), OBJPROP_ANCHOR , ANCHOR_RIGHT_UPPER );
        }
     }
  } 
코드의 다른 부분에서 이 목록의 마지막 텍스트를 가져오는 방법을 알려주십시오.
 
Rustam Bikbulatov :

말씀해 주시겠어요?

마지막으로 열린 주문을 찾아야 합니다. 그의 티켓을 알아보세요. 다음으로 개체 이름 목록에서 개체 이름이 있는 줄에서 마지막 주문의 티켓을 찾은 부분 문자열의 발생을 찾습니다. 개체 이름에서 마지막 주문의 티켓을 찾는 즉시 필요한 그래픽 개체입니다. 이 그래픽 개체에서 필요한 것을 추출해야 합니다.