[ARCHIVE!] 포럼을 어지럽히 지 않도록 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 4. - 페이지 414

 
7777877 :
저것들. 창 핸들은 0(기본 창)에서 시작하는 창의 시퀀스 번호입니까?

아니다
 

모두 좋은 하루! 매싱에 대한 Expert Advisor를 작성하는 과정에서 더 정확한 출구 지점을 찾고 있었고 RSI(8)와 ADX(25)의 교차점을 발견했습니다. 시각적으로 모든 것이 데모에서 수동 거래로 괜찮습니다.

문제는 예를 들어 RSI(8)에 0에서 100까지의 제한이 있고 ADX(25)에 제한이 없는 경우와 같이 Expert Advisor에서 RSI(8)와 ADX(25) DI+를 교차하는 조건을 작성하는 방법입니다. 즉, 경계를 지정하지 않고 차트에 ADX를 던진 다음 RSI를 던진 경우 RSI는 최대 및 최소 ADX로 조정됩니다. ADX 제한이 0에서 100이면 ADX와 RSI의 명시적 교차가 거의 없습니다.

ADX로 스케일링할 때 RSI 값을 결정할 수 있습니까?

 
PapaYozh :

아니다
????...그렇게 어렵지 않다면 좀 더 자세한 답변을 부탁드립니다... 그리고 최소한의 간단한 스크립트가 예제로 제공되어 여전히 무엇을 이해할 수 있다면 좋을 것입니다. 는 WindowHandle 함수입니다.
 
drimara : 즉, 경계를 지정하지 않고 차트에 ADX를 던진 다음 RSI를 던진다면 RSI는 ADX 최대값과 최소값으로 조정됩니다. ADX 제한이 0에서 100이면 ADX와 RSI의 명시적 교차가 거의 없습니다.

ADX로 스케일링할 때 RSI의 값을 결정할 수 있습니까?

그리고 나서 좌우로 움직이면 교차점이 걷기 시작합니다.
 
iCustom을 통해 연결할 때 비표준 표시기의 매개변수 수에 제한이 있습니까?

약 8 개의 매개 변수가있는 표시기가 있고 모든 매개 변수를 올바르게 입력하고 여러 번 확인했지만 컴파일하는 동안 오류 ')'가 계속 나타납니다. 잘못된 매개 변수 개수 D:\InstaTrader\experts\Expert_2.mq4 ( 11, 280)
 
sss2019 :
iCustom을 통해 연결할 때 비표준 표시기의 매개변수 수에 제한이 있습니까?

약 8 개의 매개 변수가있는 표시기가 있고 모든 매개 변수를 올바르게 입력하고 여러 번 확인했지만 컴파일하는 동안 오류 ')'가 계속 나타납니다. 잘못된 매개 변수 개수 D:\InstaTrader\experts\Expert_2.mq4 ( 11, 280)
코드 표시 + 표시기의 입력 매개변수는 무엇입니까
 
7777877 :
????...그렇게 어렵지 않다면 좀 더 자세한 답변을 부탁드립니다... 그리고 최소한의 간단한 스크립트가 예제로 제공되어 여전히 무엇을 이해할 수 있다면 좋을 것입니다. 는 WindowHandle 함수입니다.


현재 지식 수준에서는 이것이 필요하지 않습니다.

프로그래머가 되고 싶다면 Google 의 도움으로 과학을 갉아먹으세요. 쿼리 " 창 핸들 site:mql4.com "

 
내 질문에 대해 프로그래밍 전문가에게 묻습니다. 이 고문을 만드는 것이 정말 가능한가요?
 
stater :
나는 프로그래밍 전문가에게 내 질문에 대해 묻습니다. 이 고문을 만드는 것이 정말 가능합니까?

모든 것이 가능하다, 욕망이 있을 것이다

다음 사항을 참조하십시오.

1) 바 개방 제어

2) 주문 보내기

시도하면 전문가가 수정합니다.

 

여기서 고문은 교차로뿐만 아니라 양초가 닫힐 때 주문이 열리도록해야합니다.

도움을 주실 수 있는 분, 미리 감사드립니다.

//+----------------------------------------------- --------------------+

//| RSI_MA.mq4 |

//| 저작권 © 2008, AEliseev k800elik@gmail.com |

//| http://www.metaquotes.net |

//+----------------------------------------------- --------------------+

#property copyright "Copyright © 2008, Andrey E. k800elik@gmail.com"

#속성 링크 "http://www.metaquotes.net"


//---- 입력 매개변수

extern int CCI_Per=14;

외부 int MA_Per=20;

extern int CCI_close_Per=14;

외부 이중 TakeProfit=500;

외부 이중 정지 손실 = 150;

외부 이중 로트=0.01;

extern int 예금=1000;

extern bool MM=거짓;

외부 정수 _MagicNumber = 13131313;

extern int _Sleep=5000;


int LotA=1, Err=0;

정수 j = 0, var2, var1;

정수 카운터 = 0;

인트 티켓;

부울 var3;


부울 주문=거짓;


//+----------------------------------------------- --------------------+

//| 전문가 초기화 기능 |

//+----------------------------------------------- --------------------+

정수 초기화()

{

Comment("CCI_MA v1.5 © 2008, Andrey E. k800elik@gmail.com");

리턴(0);

}

//+----------------------------------------------- --------------------+

//| 전문가 초기화 해제 기능 |

//+----------------------------------------------- --------------------+

정수 초기화()

{

/* 정수 i, a1, a2;

//----

if (OrdersTotal()>0)

{

(i=0; i==OrdersTotal(); i++)

{

주문선택(i,SELECT_BY_POS);

if (OrderMagicNumber()==131313)

{

a1=OrderClose(LotA*Lots,Ask,5,Red);

//a2=OrderClose(var1,LotA*Lots,Ask,5,Red);

}

}

} */

리턴(0);

}

//+----------------------------------------------- --------------------+

//| 전문가 시작 기능 |

//+----------------------------------------------- --------------------+

정수 시작()

{

//----

if (isNewBar()) EveryBar();

에브리틱();

//----

리턴(0);

}

//+----------------------------------------------- --------------------+


//+----------------------------------------------- --------------------+

//| 새로운 바 확인 |

//+----------------------------------------------- --------------------+

부울 isNewBar()

{ 정적 날짜 시간 TimeBar=0;

부울 플래그=거짓;

if(TimeBar!=시간[0])

{

TimeBar=시간[0];

플래그=참;

}

반환(플래그);

}

//+----------------------------------------------- --------------------+

//| 새 막대가 나타날 때 작업 수행 |

//+----------------------------------------------- --------------------+

무효 EveryBar()

{

// Print("NEW BAR가 도착했습니다!");

이중 MA[100], CCI[100], CCIclose[100], StandDevi[100];

int i,limit=ArraySize(CCI);

이중 SL, TP;

수면(_수면);

SL = NormalizeDouble(Ask - StopLoss*Point, Digits);

TP = NormalizeDouble(Ask + TakeProfit*포인트, 자릿수);

for(i=0; i<한계; i++)

{

CCI[i]=iCCI(NULL,0,CCI_Per,PRICE_CLOSE,i);

CCIclose[i]=iCCI(NULL,0,CCI_close_Per,PRICE_CLOSE,i);

MA[i]=iMAOnArray(CCI,0,MA_Per,0,MODE_SMA,i);

}

// 새로운 주문을 열기에 충분한 돈이 있는지 확인

if(AccountFreeMargin()<(1000*Lots))

{

Print("돈이 없습니다. Free Margin = ", AccountFreeMargin());

리턴(0);

}

//================================================== ==================================

정수 _GetLastError = 0, _OrdersTotal = OrdersTotal();

//---- 모든 열린 위치를 통해 루프

( int z = _OrdersTotal - 1, z >= 0, z -- )

{

//---- 위치 선택 중 오류가 발생하면 다음 위치로 이동

if ( !OrderSelect( z, SELECT_BY_POS ) )

{

_GetLastError = GetLastError();

Print( "OrderSelect( ",z, ", SELECT_BY_POS ) - 오류 번호", _GetLastError);

계속하다;

}

// 현재 악기에 대한 위치가 열려 있지 않으면 건너뜁니다.

if ( OrderSymbol() != Symbol() ) 계속;

// MagicNumber가 _MagicNumber와 같지 않으면 건너뜁니다.

// 이 위치

if ( OrderMagicNumber() != _MagicNumber ) 계속;

//---- BUY 포지션이 열려 있으면

경우 ( 주문 유형() == OP_BUY )

{

//---- CCI가 190행을 아래로 가로지르는 경우

if (((CCIclose[2]>190) && (CCIclose[1]<=100)) || (CCI[1]<MA[limit-MA_Per-1]) && (CCI[2]>=MA[limit -MA_Per-2]))

{

//---- 위치 닫기

if ( !OrderClose( OrderTicket(), OrderLots(), Bid, 10, Green ) )

{

_GetLastError = GetLastError();

Print( "오류 주문 닫기 # ", _GetLastError );

오류=1;

리턴(-1);

}

}

// 신호가 변경되지 않은 경우 종료 - 열기에는 너무 이릅니다.

// 새로운 위치

또 다른

{ 반환(0); }

}

//---- 매도 포지션이 열려 있으면

경우 ( 주문 유형() == OP_SELL )

{

//---- CCI가 -190선을 위쪽으로 넘으면

if (((CCIclose[2]<-190) && (CCIclose[1]>=-300)) || ((CCI[1]>MA[limit-MA_Per-1]) && (CCI[2]<= MA[limit-MA_Per-2])))

{

//---- 위치 닫기

if(!OrderClose( OrderTicket(), OrderLots(), 묻기, 10, 빨간색 ) )

{

_GetLastError = GetLastError();

Print( "오류 주문 닫기 # ", _GetLastError );

오류 = 2;

리턴(-1);

}

}

// 신호가 변경되지 않은 경우 종료 - 열기에는 너무 이릅니다.

// 새로운 위치

그렇지 않으면 반환(0);

}

}

//+----------------------------------------------- --------------------+

//| 실행이 이 지점에 도달하면 열린 위치가 없습니다|

//| 포지션을 열 수 있는지 확인 |

//+----------------------------------------------- --------------------+

수면(_수면);

//---- CCI가 MACD를 아래에서 위로 교차했다면,

SL = NormalizeDouble(입찰가 - 손절매*포인트, 자릿수);

TP = NormalizeDouble(Bid + TakeProfit*Point, Digits);

if ((CCI[1]>MA[limit-MA_Per-1]) && (CCI[2]<MA[limit-MA_Per-2]))

{

//---- 매수 포지션을 엽니다.

if(OrderSend( Symbol(), OP_BUY, LotA*Lots, Ask, 5, SL, TP, "CCI_test_buy", _MagicNumber, 0, Green ) < 0 )

{

_GetLastError = GetLastError();

Print( "오류 OrderSend OP_BUY 아니오 ", _GetLastError );

오류 = 3;

리턴(-1);

}

리턴(0);

}

//---- CCI가 MACD를 위에서 아래로 교차했다면,

SL = NormalizeDouble(Ask + StopLoss*Point, Digits);

TP = NormalizeDouble(요청 - TakeProfit*포인트, 자릿수);

if ((CCI[1]<MA[limit-MA_Per-1]) && (CCI[2]>MA[limit-MA_Per-2]))

{

//---- 매도 포지션을 엽니다.

if(OrderSend( Symbol(), OP_SELL, LotA*Lots, Bid, 5, SL, TP, "CCI_test_close", _MagicNumber, 0, Red ) < 0 )

{

_GetLastError = GetLastError();

Print( "오류 OrderSend OP_SELL # ", _GetLastError );

오류 = 4;

리턴(-1);

}

리턴(0);

}

}

//+----------------------------------------------- --------------------+

//| 모든 가격 변동에 대해 계산 수행 |

//+----------------------------------------------- --------------------+

무효 EveryTick()

{

정수 나;

경우(MM==참)

{

if (AccountBalance()>(2*Deposit)) LotA=2;

if (AccountBalance()>(3*Deposit)) LotA=3;

if (AccountBalance()>(4*Deposit)) LotA=4;

if (AccountBalance()>(5*Deposit)) LotA=5;

if (AccountBalance()>(6*Deposit)) LotA=6;

if (AccountBalance()>(7*Deposit)) LotA=7;

if (AccountBalance()>(8*Deposit)) LotA=8;

if (AccountBalance()>(9*Deposit)) LotA=9;

if (AccountBalance()>(10*Deposit)) LotA=10;

if (AccountBalance()>(11*Deposit)) LotA=11;

if (AccountBalance()>(12*Deposit)) LotA=12;

if (AccountBalance()>(13*Deposit)) LotA=13;

if (AccountBalance()>(14*Deposit)) LotA=14;

if (AccountBalance()>(15*Deposit)) LotA=15;

if (AccountBalance()>(16*Deposit)) LotA=16;

if (AccountBalance()>(17*Deposit)) LotA=17;

if (AccountBalance()>(18*Deposit)) LotA=18;

if (AccountBalance()>(19*Deposit)) LotA=19;

if (AccountBalance()>(20*Deposit)) LotA=20;

}

정수 _GetLastError = 0, _OrdersTotal = OrdersTotal();

인츠;

이중 SL, TP;

이중 MA[100], CCI[100], CCIclose[100], StandDevi[100];

int limit=ArraySize(CCI);

for(i=0; i<한계; i++)

{

CCI[i]=iCCI(NULL,0,CCI_Per,PRICE_CLOSE,i);

CCIclose[i]=iCCI(NULL,0,CCI_close_Per,PRICE_CLOSE,i);

MA[i]=iMAOnArray(CCI,0,MA_Per,0,MODE_SMA,i);

}

스위치(오류)

{

사례 1:

( z=_OrdersTotal - 1, z >= 0, z -- )

{

if ( !OrderSelect( z, SELECT_BY_POS ) )

{

_GetLastError = GetLastError();

Print( "OrderSelect( ",z, ", SELECT_BY_POS ) - 오류 번호", _GetLastError);

계속하다;

}

if ( OrderSymbol() != Symbol() ) 계속;

if ( OrderMagicNumber() != _MagicNumber ) 계속;

경우 ( 주문 유형() == OP_BUY )

{

if (((CCIclose[2]>300) && (CCIclose[1]<=300)) || (CCI[1]<MA[limit-MA_Per-1]) && (CCI[2]>=MA[limit -MA_Per-2]))

{

if ( !OrderClose( OrderTicket(), OrderLots(), Bid, 5, Green ) )

{

_GetLastError = GetLastError();

Print( "오류 CASE OrderClose # ", _GetLastError );

오류=1;

리턴(-1);

}

그렇지 않으면 오류 = 0;

}

}

}

부서지다;

//================================================== =============================

사례 2:

( z=_OrdersTotal - 1, z >= 0, z -- )

{

if ( !OrderSelect( z, SELECT_BY_POS ) )

{

_GetLastError = GetLastError();

Print( "OrderSelect( ",z, ", SELECT_BY_POS ) - 오류 번호", _GetLastError);

계속하다;

}

if ( OrderSymbol() != Symbol() ) 계속;

if ( OrderMagicNumber() != _MagicNumber ) 계속;

경우 ( 주문 유형() == OP_SELL )

{

if (((CCIclose[2]<-300) && (CCIclose[1]>=-300)) || ((CCI[1]>MA[limit-MA_Per-1]) && (CCI[2]<= MA[limit-MA_Per-2])))

{

if(!OrderClose( OrderTicket(), OrderLots(), 묻기, 5, 빨간색 ) )

{

_GetLastError = GetLastError();

Print( "오류 CASE OrderClose # ", _GetLastError );

오류 = 2;

리턴(-1);

}

그렇지 않으면 오류 = 0;

}

}

}

부서지다;

//================================================== ===============================

사례 3:

SL = NormalizeDouble(입찰가 - 손절매*포인트, 자릿수);

TP = NormalizeDouble(Bid + TakeProfit*Point, Digits);

if(OrderSend( Symbol(), OP_BUY, LotA*Lots, Ask, 7, SL, TP, "AI_test_buy", _MagicNumber, 0, Green ) < 0 )

{

_GetLastError = GetLastError();

Print( "오류 CASE OrderSend OP_BUY 아니오 ", _GetLastError );

오류 = 3;

리턴(-1);

}

그렇지 않으면 오류 = 0;

부서지다;

//================================================== ====================================

사례 4:

SL = NormalizeDouble(Ask + StopLoss*Point, Digits);

TP = NormalizeDouble(요청 - TakeProfit*포인트, 자릿수);

if(OrderSend( Symbol(), OP_SELL, LotA*Lots, Bid, 7, SL, TP, "AI_test_close", _MagicNumber, 0, Red ) < 0 )

{

_GetLastError = GetLastError();

Print( "오류 CASE OrderSend OP_SELL # ", _GetLastError );

오류 = 4;

리턴(-1);

}

그렇지 않으면 오류 = 0;

부서지다;

}

}