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

 
Vladislav Andruschenko :
현재로 설정된 경우 스프레드. 현재 설정된 경우 테스트 종료 날짜입니다. 더 많은 이유가 있을 수 있습니다.

스프레드 고정, 종료일 01.01.18

 
Aidar Kaliaskar :

스프레드 고정, 종료일 01.01.18


1점 비용..... 등


주말에 시도하십시오.

 

"US.30+"에서 가까운 가격으로 "US.500+" 차트에 선을 그리는 MQL4 지표를 만들려고 합니다. 일반적으로 두 기호의 가격선은 하나의 차트에서 볼 수 있어야 합니다. 아래 코드이지만 작동하지 않습니다. 로그에서 메시지는 "사용자 지정 버퍼의 표시기는 아직 지원되지 않습니다"입니다. 그것이 작동하지 않는 이유를 마음에 가르치십시오. 고마워.

 #property version    "1.00"
#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots 1
#property indicator_color1 clrRed
#property indicator_style1 STYLE_DOT
#property indicator_type1    DRAW_LINE
//---
input string    symbolName= "US.30+" ; // Symbol name
input double    difference=- 22387.0 ; // Difference from other symbol
//--- price buffer for other symbol
double otherSymbol[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,otherSymbol, INDICATOR_DATA );
//---
   return INIT_SUCCEEDED ;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int      rates_total,
                 const int      prev_calculated,
                 const int      begin,
                 const double &price[])
  {
//---
   for ( int i=prev_calculated;i<rates_total;i++)
      otherSymbol[i+ 1 ]= iClose (symbolName, PERIOD_CURRENT ,i)+difference;
   ArraySetAsSeries (otherSymbol, true );
//--- return value of prev_calculated for next call
   return (rates_total);
  }
 
Maxim Khrolenko :

"US.30+"에서 가까운 가격으로 "US.500+" 차트에 선을 그리는 MQL4 지표를 만들려고 합니다. 일반적으로 두 기호의 가격선은 하나의 차트에서 볼 수 있어야 합니다. 아래 코드이지만 작동하지 않습니다. 로그에서 메시지는 "사용자 지정 버퍼의 표시기는 아직 지원되지 않습니다"입니다. 그것이 작동하지 않는 이유를 마음에 가르치십시오. 고마워.

호출의 첫 번째 형식을 사용해야 하기 때문입니다.
 
Artyom Trishkin :
호출의 첫 번째 형식을 사용해야 하기 때문입니다.
변경되고 ... 밝혀졌습니다! 매우 감사합니다.
 
STARIJ :

문제가 무엇인지 찾았습니다. 한 주기에 대해 60초의 카운트다운을 빼야 합니다.

감사합니다. 설명 감사합니다.

60초 대신 300초가 됩니다.

포지션 오픈 시간 이 다르므로 포지션 오픈 시간부터 300초 간격으로 작성해야 합니다.

이 경우 어떻게 합니까?

 
lil_lil : 60초가 아닌 300이 된다면....포지션 오픈 시점부터 300초 간격으로 작성해야 합니다. 이 경우 어떻게 합니까?

내 프로그램을 사용해 보셨습니까? 300정도는 거의 이해 못했는데... 60이 아닌 300을 넣으면 그런건가요? 이걸로 어떻게 수익을 내야 하는지 알려주시면 더 열심히 파헤치겠습니다!

 

항상 그렇듯이 문제는 진부한 것일 수 있지만 나는 퍼즐을 풀지 못했습니다.

ema>smma from ema 또는 포인트 포인트에 도달하지 못한 경우 구매를 열어야 합니다(판매도 동일). 바가 닫힐 때 거래를 마감하고 새 거래를 엽니다. 다음도 같은 방식으로 열리지만 이전 시작가가 더 높다는 조건, 즉 last_order_price 입니다.

그러나 결과적으로 원하는 곳에서 열리고 닫힙니다. (테스트 시작 시 일반적으로 열리고 즉시 닫힙니다)

 #property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property strict

input int MA_period= 10 ;
input int take= 200 , stop= 200 , Magic= 1104 ;
input double lot= 0.05 ;
input int slippage= 30 ;
input int point= 5 ;
double last_order_price,fast_MA,slow_MA;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   fast_MA= iMA ( Symbol (), PERIOD_CURRENT ,MA_period, 0 , MODE_EMA , PRICE_CLOSE , 0 );
   slow_MA= iMA ( Symbol (), PERIOD_CURRENT ,MA_period, 0 , MODE_SMMA , PRICE_CLOSE , 0 );
 
   if (fast_MA>slow_MA) last_order_price= 0 ;
       else last_order_price= Ask +stop* _Point ;

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

   fast_MA= iMA ( Symbol (), PERIOD_CURRENT ,MA_period, 0 , MODE_EMA , PRICE_CLOSE , 0 );
   slow_MA= iMA ( Symbol (), PERIOD_CURRENT ,MA_period, 0 , MODE_SMMA , PRICE_CLOSE , 0 );
   
   if ( Bid <=fast_MA+point* _Point && Bid >=fast_MA && fast_MA>slow_MA && SymOrder() && Bid >last_order_price)
   {
       OrderSend ( Symbol (), OP_BUY ,lot, Ask ,slippage, Ask -stop* _Point , Ask +take* _Point , NULL ,Magic, 0 , clrBlue );
      last_order_price= Bid ;
   }
   
   if ( Bid >=fast_MA-point* _Point && Bid <=fast_MA && fast_MA<slow_MA && SymOrder() && Bid <last_order_price)
   {
       OrderSend ( Symbol (), OP_SELL ,lot, Bid ,slippage, Bid +stop* _Point , Bid -take* _Point , NULL ,Magic, 0 , clrRed );   
      last_order_price= Bid ;
   }
      
   if (!SymOrder() && Volume [ 0 ]< 2 && OrderType ()== OP_BUY )
   {
       OrderClose ( OrderTicket (),lot, Bid ,slippage, clrWhite ); 
      
   }
   if (!SymOrder() && Volume [ 0 ]< 2 && OrderType ()== OP_SELL )
   {
       OrderClose ( OrderTicket (),lot, Ask ,slippage, clrWhite );  

   }     
      
  }
//+------------------------------------------------------------------+
bool SymOrder()
{
   for ( int i= 0 ; i< OrdersTotal (); i++)
      {
         OrderSelect (i, SELECT_BY_POS , MODE_TRADES );
         if ( OrderSymbol ()== Symbol () && OrderMagicNumber ()==Magic) return false ;
      }

   return true ;
}
 
Roman Sharanov :

항상 그렇듯이 문제는 진부한 것일 수 있지만 나는 퍼즐을 풀지 못했습니다.

ema>smma from ema 또는 포인트 포인트에 도달하지 못한 경우 구매를 열어야 합니다(판매도 동일). 바가 닫힐 때 거래를 마감하고 새 거래를 엽니다. 다음도 같은 방법으로 열리지만 이전 시작가가 더 높다는 조건, 즉 last_order_price 입니다.

그러나 결과적으로 원하는 곳에서 열리고 닫힙니다. (테스트 시작 시 일반적으로 열리고 즉시 닫힙니다)

글쎄, 어떻게 말할 수 있습니까? 코드를 클립보드에 저장하고, 고문에게 작성하고, 전략 테스터 에서 실행하시겠습니까? 글쎄, 나는 무엇이 열리고 닫히는지 본다. 그래서 무엇? 데모 실행 - 오늘은 토요일, 내일은 일요일, 시장은 휴무 입니다. 눈으로 봐? 따라서 모든 변수의 값을 염두에 둘 필요가 있습니다. 연필과 종이로 디버깅하는 방법이 있었습니다. 시도해 보세요. 모든 OrderSelect 및 OrderClose 앞에 Alert("Bid=", Bid," Fast+P=",Fast_Ema+point*_Point," ...)를 설정하여 테스터에서 1일을 설정할 수도 있습니다. 예를 들면, 2월 19일부터 2월 20일까지 그리고 테스트 후 로그를 열고 복사를 만들고 추가 행을 삭제하고 분석합니다. MetaEditor에도 디버깅 기능이 있습니다. 디버그하는 방법을 배우면 ... 훌륭할 것입니다.
 

그의 버튼은 어디에 있습니까?

#include <Controls\SpinEdit.mqh> (텍스트 필드 증분)에서 CSpinEdit 컨트롤의 텍스트를 정렬하는 방법을 알려주십시오.

기본적으로 왼쪽 정렬이지만 오른쪽 정렬이 되었으면 합니다.