[경고, 주제 닫힘!] 포럼을 어지럽히지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 당신 없이는 어디에도 없습니다. - 페이지 347

 

전문가 여러분, 누군가 이 코드를 수정하여 간단한 Expert Advisor를 만들 수 있도록 도와주세요. 본질은 현재 가격 에서 지정된 스톱과 함께 2개의 포지션 Sell과 Bui를 간단하게 오픈하는 것입니다. 그런 다음 테이크 중 하나 또는 두 스톱이 모두 트리거되면 새 위치를 여는 식입니다. 에센스는 간단한 것 같으면서도 여전히 안되네요 ㅠㅠ 미리 감사합니다!

//+------------------------------------------------------------------+
//| 2DiffOrders.mq4 |
//| Copyright © 2008, MetaQuotes Software Corp. |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, MetaQuotes Software Corp."
#property link "http://www.metaquotes.net"

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
extern double lots=0.01;
extern int SL_in_pips;
extern int TP_in_pips;
int x2;
int init()
{
  if(SL_in_pips<=MarketInfo(Symbol(),MODE_STOPLEVEL) && SL_in_pips>0)
{
SL_in_pips=MarketInfo(Symbol(),MODE_STOPLEVEL);
Alert("Stoploss установлен слишком близко к цене открытия. Должен быть минимум ",MarketInfo(Symbol(),MODE_STOPLEVEL),"pt.");
}
if(TP_in_pips<=MarketInfo(Symbol(),MODE_STOPLEVEL) && TP_in_pips>0)
{
TP_in_pips=MarketInfo(Symbol(),MODE_STOPLEVEL);
Alert("Takeprofit установлен слишком близко к цене открытия. Должен быть минимум ",MarketInfo(Symbol(),MODE_STOPLEVEL),"pt.");
}
x2=1; 
while(x2!=0)
{
if(OrderSend(Symbol(),0,lots,Ask,2,Bid-15*Point,Bid+15*Point,0)!=-1)
{
Alert("Ордер типа BUY успешно открыт");
OrderSend(Symbol(),1,lots,Bid,2,Ask+15*Point,Ask-15*Point,0);
x2=GetLastError();
if(x2==0)
Alert("Ордер типа SELL успешно открыт");
if(x2!=0)
Alert("Ордер типа SELL не открыт. Ошибка №: ",x2);
}else
{
x2=GetLastError();
if(x2!=0)
Alert("Ордер типа BUY не открыт. Ошибка №: ",x2);
}
}
//----
return(0);
 

파일:
ala.mq4  3 kb
 
Reshetov >> :

그것은 정확하게 보이지만 기계 표현에서 마지막 비트는 다른 값을 가질 수 있습니다. 저것들. 2.9999, 3 또는 3.00000001


이러한 오해를 없애기 위해 MQL에는 NormalizeDouble() 함수가 있습니다.

예, NormalizeDouble()이 도움이 됩니다. 감사합니다.

그러나 이것이 단순한 분할처럼 어떻게 가능한지 명확하지 않습니다. 0.5 또는 0.9 또는 0.31을 0.1로 나누면 모든 규칙이 적용됩니다.

그리고 여기 분명히 2.9로 밝혀졌습니다. 명확하지 않습니다 ... 계산기가 더 정확하게 해결합니다 :-)

도움을 주신 Reshetov와 splxgf 에게 감사드립니다.

 
mukata >> :


그러나 이것이 단순한 분할처럼 어떻게 가능한지 명확하지 않습니다. 0.5 또는 0.9 또는 0.31을 0.1로 나누면 모든 규칙이 적용됩니다.

그리고 여기 분명히 2.9로 밝혀졌습니다. 명확하지 않습니다 ... 계산기가 더 정확하게 해결합니다 :-)


계산기에는 결과를 반올림하기 위한 내장 함수가 있습니다. 또한 부동 소수점 수를 계산하는 데 동일한 수학 보조 프로세서를 사용하기 때문에 결정합니다.

 

안녕하세요!

누가 할 수 있는지 알려주세요!

나는 아직도 그것을 하는 방법을 이해하지 못한다.

일:

EA는 하루에 한 번 1-2개의 주문을 합니다.

변수의 초기 값은 수동으로 설정되며 1에서 10 사이의 값을 사용할 수 있습니다.

이전에 설정한 변수를 1씩 증가하여 -10 값으로 변경해야 합니다.

TP가 해당 날짜에 실행되지 않은 경우 고문의 각 근무일에 1만큼만.

TP - 변수가 실행되면 값 - 1이 반환됩니다.

SL 계산은 1~2개가 있을 수 있고 값은 하루에 한 번만 변경할 수 있기 때문에 적합하지 않습니다.

저것들.

변수 = 1

1일차 SL - 변수 =2

2일차 SL - 변수 =3

3일차 SL - 변수 =4

4일 TP - 변수 =1

5일차 SL - 변수 =2

... 등.

돕다!

고맙습니다.

 
Enter писал(а) >>

전문가 여러분, 누군가 이 코드를 수정하여 간단한 Expert Advisor를 만들 수 있도록 도와주세요. 본질은 간단합니다. 현재 가격에서 지정된 스톱으로 2개의 포지션 Sell과 Bui를 엽니다. 그런 다음 테이크 중 하나 또는 두 스톱이 모두 트리거되면 새 위치를 여는 식입니다. 에센스는 간단한 것 같으면서도 여전히 안되네요 ㅠㅠ 미리 감사합니다!

글쎄, Expert Advisor가 작동하려면 Expert Advisor의 "고기"가 여전히 시작 기능에 있어야합니다 ...
 

전문가 여러분, 도와주세요.

1주기 모멘텀을 계산해 큰 주기로 적분하여 지표로 표시하는 코드가 있습니다.

결과 곡선의 평균을 찾아 지표로 표시하는 지정된 기간의 지표를 작성해야 합니다.

나는 코드를 첨부하고 있습니다 :

#속성 표시기_분리_창
#속성 표시기_버퍼 1
#property indicator_color1 다저블루
#속성 표시기_너비1 2

//------- 표시기의 외부 매개변수 ------------------------------------ -- --+
extern int MTM_Period = 1;
//외부 정수 MTM_Integr_Period = 1000;

//extern int Applied_Price = 0; // 중고 가격:
// 0 - PRICE_CLOSE
// 1 - PRICE_OPEN
// 2 - PRICE_HIGH
// 3 - PRICE_LOW
// 4 - PRICE_MEDIAN
// 5 - PRICE_TYPICAL
// 6 - PRICE_WEIGHTED
외부 정수 NumberOfBars = 1000; // 계산할 막대의 수(0-모두)

//------- 인디케이터 버퍼 ---------------------------------- ------ ------+
이중 buf0[];

//+----------------------------------------------- ------------------------------+
//| 사용자 지정 표시기 초기화 기능 |
//+----------------------------------------------- ------------------------------+
무효 초기화() {
SetIndexBuffer(0, buf0);
SetIndexEmptyValue(0, 0);
SetIndexLabel(0, "i-mtm_integr");
SetIndexStyle(0, DRAW_LINE);
}

//+----------------------------------------------- ------------------------------+
//| 사용자 지정 표시기 초기화 해제 기능 |
//+----------------------------------------------- ------------------------------+
무효 deinit() {
논평("");
}

//+----------------------------------------------- ------------------------------+
//| 사용자 지정 표시기 반복 기능 |
//+----------------------------------------------- ------------------------------+
무효 시작() {
int LoopBegin, i,j, per=3;
이중 mtm, mtmsum;

if (NumberOfBars==0) LoopBegin=Bars-1;
else LoopBegin=바 수;
LoopBegin=MathMin(LoopBegin, 막대-1);

for (i=LoopBegin, i>=0, i--) {
mtm=닫기[i]-닫기[MTM_Period+i];
mtmsum=mtmsum+mtm;
buf0[i]=mtm 합계;
}
/* for (i=LoopBegin-per;i>=per;i--){
mtm=닫기[i]-닫기[MTM_Period+i];
mtmsum[i]=0+mtm;
(j=per;j<=0;j--){
mtmsum[i]=0+mtmsum[i+j];
mtmsum[i]=mtmsum[i]/당;
buf0[i]=mtmsum[i];
}
}*/
}
//+----------------------------------------------- ------------------------------+

 
VNG писал(а) >>

전문가 여러분, 도와주세요.

1주기 모멘텀을 계산해 큰 주기로 적분하여 지표로 표시하는 코드가 있습니다.

결과 곡선의 평균을 찾아 지표로 표시하는 지정된 기간의 지표를 작성해야 합니다.

 #property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Red
#property indicator_width1 2

//------- Внешние параметры индикатора ----------------------------------------+
extern int MTM_Period = 1 ; 
//extern int MTM_Integr_Period = 1000; 

//extern int Applied_Price = 0; // Используемая цена:
// 0 - PRICE_CLOSE
// 1 - PRICE_OPEN
// 2 - PRICE_HIGH
// 3 - PRICE_LOW
// 4 - PRICE_MEDIAN
// 5 - PRICE_TYPICAL
// 6 - PRICE_WEIGHTED
extern int NumberOfBars = 1000 ; // Количество баров обсчёта (0-все)
extern int MA_Period = 3 ;
extern int MA_Mode = 0 ;

//------- Буферы индикатора ---------------------------------------------------+
double buf0 [ ] ;
double MA [ ] ;
//+----------------------------------------------------------------------------+
//| Custom indicator initialization function |
//+----------------------------------------------------------------------------+
void init ( ) {
   SetIndexBuffer ( 0 , buf0 ) ;
   SetIndexEmptyValue ( 0 , 0 ) ;
   SetIndexLabel ( 0 , "i-mtm_integr" ) ;
   SetIndexStyle ( 0 , DRAW_LINE ) ;
   SetIndexBuffer ( 1 , MA ) ;
   SetIndexLabel ( 1 , "MA" ) ;
   SetIndexStyle ( 1 , DRAW_LINE ) ;

}

//+----------------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+----------------------------------------------------------------------------+
void deinit ( ) {
Comment ( "" ) ;
}

//+----------------------------------------------------------------------------+
//| Custom indicator iteration function |
//+----------------------------------------------------------------------------+
void start ( ) {
   int LoopBegin , i , j , per = 3 ;
   double mtm , mtmsum ;

   if ( NumberOfBars = = 0 ) LoopBegin = Bars - 1 ;
   else LoopBegin = NumberOfBars ;
  LoopBegin = MathMin ( LoopBegin , Bars - 1 ) ;

   for ( i = LoopBegin ; i > = 0 ; i - - ) {
    mtm = Close [ i ] - Close [ MTM_Period + i ] ;
    mtmsum = mtmsum + mtm ;
    buf0 [ i ] = mtmsum ;
   }
   for ( i = LoopBegin - per ; i > = per ; i - - ) {
     MA [ i ] = iMAOnArray ( buf0 , 0 , MA_Period , 0 , MA_Mode , i ) ;
   }
}
//+----------------------------------------------------------------------------+
아마도 이 옵션이 작동할 것입니다. 코드를 확인하지 않고 브라우저에서 작성했습니다.
 
Reshetov >> :

그것은 정확하게 보이지만 기계 표현에서 마지막 비트는 다른 값을 가질 수 있습니다. 저것들. 2.9999, 3 또는 3.00000001

이러한 오해를 없애기 위해 MQL에는 NormalizeDouble() 함수가 있습니다.


모든 Ask, Bid, Low 등의 값에 대해 NormalizeDouble() 함수가 기본적으로 실행되지 않는 이유는 무엇입니까?

모두가 이것을 보았고 모든 사람이 "수동으로"수정해야합니다. MT가 자신이 낳은 것을 읽을 수 없다는 것이 이상합니다.

 
Silen >> :

감사합니다. start()에서 데이터를 사용할 수 있다는 보장이 있습니까?

확실히 하려면 RefreshRates()를 사용해 볼 수 있습니다. - 표준 Metaeditor 도움말의 예를 참조하세요.

 

Expert Advisor 최적화 에는 "보고서로 저장" 옵션이 있지만 Internet Explorer에는 "입력 매개변수"가 표시되지 않으며,

html 코드로 판단하면 그 안에 존재합니다. 일반적으로 이러한 매개변수를 위해 최적화가 시작되었습니다.

익스플로러에서 보는 방법 아시는 분 계신가요?


(별도의 명령으로 텍스트 파일로 복사하는 것은 여전히 가능하지만 IE에서 보는 것이 바람직합니다)