포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 70

 

친애하는 포럼 사용자!

도와주세요. 문제는 다음과 같습니다. 1) 예를 들어 SELL에서 거래가 채널의 상한선에 도달하면 열리고 하한선에 도달하면 닫히도록 코드를 작성하는 방법; 2) 하나의 신호에서 하나의 거래만 시작해야 합니다. 3) 어드바이저 설치 시 바로 딜이 열리지만, 반드시 채널라인에 도달해야만 딜이 열리게 됩니다.

도움을 주시면 감사하겠습니다.

extern 이중 랏 = 0.1;
외부 정수 TakeProfit = 30; //takeprofit(사용하지 않으려면 음수 또는 0);
extern int 손절매 = 20; // 매수를 위한 손절매 수준;
extern int 미끄러짐 = 2; // 미끄러짐
extern 문자열 주석 = "켈러";
외부 정수 매직 = 333;

extern string Indi = "지표 데이터";
extern string TimeFrame = " 현재 시간 프레임";
외부 int MA_Period = 10; // 0 - SMA, 1 - EMA, 2 - SMMA, 3 - LWMA
외부 int Mode_MA = 0; // 0 - 종가, 1 - 시가, 2 - 고가, 3 - 저가, 4 - 중앙값, 5 - 일반, 6 - 가중치
외부 정수 Price_Type = 5;

이중 PriceHigh, PriceLow, SL, TP;
인트 티켓;
//+----------------------------------------------- --------------------+
//| 전문가 초기화 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
if (Digits ==3 || Digits ==3) // 5자리 브로커의 경우
{
이익을 취하십시오 *= 10;
손절매 *= 10;
미끄러짐 *= 10;
}
리턴(0);
}
//+----------------------------------------------- --------------------+
//| 전문가 초기화 해제 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
리턴(0);
}
//+----------------------------------------------- --------------------+
//| 전문가 시작 기능 |
//+----------------------------------------------- --------------------+
정수 시작()
{
PriceHigh = iCustom(Symbol(), 0, "Keller", TimeFrame, MA_Period, Mode_MA, Price_Type, 0, 0); // 빨간색 상위 버퍼 0
PriceLow = iCustom(Symbol(), 0, "Tma", TimeFrame, MA_Period, Mode_MA, Price_Type, 2, 0); // 빨간색 하단 버퍼 2

if (Bid >= PriceHigh && CountSell() == 0) // 여기서 Countsell은 주문이 매 틱이 아니라 한 번에 하나씩 열리는 검사입니다.
{
SL = NormalizeDouble(입찰가 + 손절매 * 포인트, 자릿수);
TP = NormalizeDouble(Bid - TakeProfit * 포인트, 자릿수);

티켓 = OrderSend(Symbol(), OP_SELL, 랏, 비드, 슬리피지, 0, 0, Сomment, Magic, 0, Red); // 여기서 0은 SL 및 TP(EU 계정의 경우 0이 설정됨)이고 마지막 0은 실험입니다.
if (티켓 > 0) // 미결 주문 확인
{
if (OrderSelect(티켓, SELECT_BY_TICKET, MODE_TRADES) == true)
OrderModify(티켓, OrderOpenPrice(), SL, TP, 0); // 여기서 0은 표현식입니다.
}
}


if (Ask <= PriceLow && CountBuy() == 0)// 여기서 Countsell은 주문이 매 틱마다 열리는 것이 아니라 한 번에 하나씩 열리는 수표입니다.
{
SL = NormalizeDouble(Ask - StopLoss * 포인트, 자릿수);
TP = NormalizeDouble(Ask + TakeProfit * 포인트, 자릿수);

티켓 = OrderSend(Symbol(), OP_BUY, lot, Ask, Slippage, 0, 0, Сomment, Magic, 0, Blue); // 여기서 0은 SL 및 TP(EU 계정의 경우 0이 설정됨)이고 마지막 0은 실험입니다.
if (티켓 > 0) // 미결 주문 확인
{
if (OrderSelect(티켓, SELECT_BY_TICKET, MODE_TRADES) == true)
OrderModify(티켓, OrderOpenPrice(), SL, TP, 0); // 여기서 0은 표현식입니다.
}
}


if (Bid >= PriceHigh && CountBuy() > 0) // 가격이 채널의 상한선에 도달하고 주문 수가 0보다 큰 경우
{
(int i=OrdersTotal()-1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)== true)
{
if (OrderMagicNumber() == Magic && OrderType() == OP_BUY) // 이것이 우리의 구매 주문인지 확인
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black); // 채널의 위쪽 경계에서 주문을 닫습니다.
}
}
}
if (Ask <= PriceLow && CountSell() > 0) // 가격이 채널의 하단 경계에 도달하고 주문 수가 0보다 큰 경우
{
for ( i=OrdersTotal()-1; i >= 0; i--) // 구매에 대한 변수 정의는 더 이상 int로 설정되지 않습니다.
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)== true)
{
if (OrderMagicNumber() == Magic && OrderType() == OP_SELL) // 이것이 우리의 판매 주문인지 확인
OrderClose(OrderTicket(), OrderLots(), 묻기, 미끄러짐, 검정); // 채널의 아래쪽 경계에서 주문을 닫습니다.
}
}
}

리턴(0);
}

//+----------------------------------------------- --------------------+
int CountSell()// 확인 - 진행 중인 판매 주문 수
{
정수 개수 = 0;
for (int trade = OrdersTotal() - 1; trade >=0; trade --)
{
OrderSelect(무역, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_SELL)
카운트++;
}
}
리턴(카운트);
}
//+----------------------------------------------- --------------------+
int CountBuy()// 확인 - 진행 중인 구매 주문 수
{
정수 개수 = 0;
for (int trade = OrdersTotal() - 1; trade >=0; trade --)
{
OrderSelect(무역, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
카운트++;
}
}
리턴(카운트);
}

 
화면을 추가한다
 
artmedia70 :

아니요, 그들은 헤어지지 않았습니다. 나는 당신의 코드를 보고 "보지 않고"라고 대답했습니다. 귀하의 라인:

- 사이클 인덱스 i 에 총 수평선 수와 동일한 값을 할당합니다. 그 중 3개가 있으면 주기는 2에서 0으로 됩니다. 그리고 주기에 무엇이 있는지 명확하지 않지만 2에서 0으로 3번만 반복됩니다.


예 - 글쎄, 여기 ... 그리고 그것이 바로 내가 걱정했던 것입니다. 사실 특별히 설계된 실험이 없었지만 단순히 관찰에 따르면 다른 물체가있는 곳에서도 여전히 작동했습니다.

 for ( int i= ObjectsTotal ( OBJ_HLINE )- 1 ; i>= 0 ; i--) 

그리고 그것은 올바르게 작동했습니다. 그러나 당신이 묘사한 바로 그 점에서 의심이 생겼습니다. 그래서 저는 이 부분을 명확히 하고 싶었습니다.

그리고 당신의 의견이 내 가정을 일관되게 확인시켜줘서 기쁩니다. 이 문제가 확실하다고 가정합시다.

다시 한 번 대단히 감사합니다!

 
bistreevseh :


나는 표시기, 사용자 정의가 있으며 히스토그램과 함께 사용되며 모든 값이 최대입니다. 중요합니다. 히스토그램의 막대 색상 만 중요하며 입력 매개 변수가 없습니다. 버퍼 2 : 0 - 빨간색 막대, 1 - 막대의 파란색, 나는 Imperial 방법을 사용합니다. 0에서는 버퍼가 값을 변경하지 않지만 1에서는 변경된다는 것을 알았습니다. 거래 기준을 어떻게 작성해야 할지 모르겠습니다. 설명 부탁드립니다. 미리 감사드립니다.


인디케이터 소스코드가 있다면 전혀 어렵지 않습니다. 소스코드를 보고 인디케이터의 색상 변경 조건을 찾아보세요. 우리는 그것들을 기반으로 신호를 형성합니다. 이는 2가지 방법으로 수행할 수 있습니다. 첫 번째는 "wrapper"를 작성하여 표시기 코드가 변경되지 않는 동안 버퍼 값을 변경하는 조건을 분석하는 것입니다. iCustom()을 사용 하고, 두 번째는 표시기 코드를 EA에서 호출할 수 있는 함수입니다. 두 가지 방법 모두 사이트의 기사에 설명되어 있습니다.

예를 들어 부드럽게 된 Heikin-Ashi에 관심이 있는 경우 - 사이트를 뒤지는 - 이 지표에 대한 토론이 있었습니다. 제가 기억하는 한 그들은 알고리즘과 신호 분석의 정확성에 대해 논의했습니다. 그 코드는 열려 있고 코드 베이스에 있습니다(많은 것들이 있습니다).

표시기가 일종의 고유하고 소스 코드가 없으면 문제가 훨씬 더 복잡해집니다. 그런데 역설계가 항상 소비된 노력을 정당화하지는 않습니다.

 
VladislavVG :

인디케이터 소스코드가 있다면 전혀 어렵지 않습니다. 소스코드를 보고 인디케이터의 색상 변경 조건을 찾아보세요. 우리는 그것들을 기반으로 신호를 형성합니다. 이것은 두 가지 방법으로 수행할 수 있습니다. 첫 번째는 표시기 코드가 변경되지 않는 동안 버퍼 값을 변경하기 위한 조건을 분석하기 위해 "래퍼"를 작성하는 것입니다. iCustom()을 사용하여 두 번째는 표시기 코드를 EA에서 호출할 수 있는 함수입니다. 두 가지 방법 모두 사이트의 기사에 설명되어 있습니다.

예를 들어 부드러운 Heikin-Ashi에 관심이 있는 경우 - 사이트 주변 탐색 - 이 지표에 대한 토론이 있었습니다. 제가 기억하는 한 그들은 알고리즘과 신호 분석의 정확성에 대해 논의했습니다. 그 코드는 열려 있고 코드 베이스에 있습니다(많은 것들이 있습니다).

표시기가 일종의 고유하고 소스 코드가 없으면 문제가 훨씬 더 복잡해집니다. 그건 그렇고, 항상 노력을 들인 것을 정당화하지는 않는 리버스 엔지니어링입니다.


정말 감사합니다. 노력하겠습니다. "래퍼"에 대한 기사를 찾고 표시기 코드를 변환하는 데 도움을 주시겠습니까? 이것을 검색어로 해석할 수 없을 것 같습니다.
 
도와주세요, 제발. 표시기는 전날 의 고가와 저가 선을 그립니다 . 그는 매일 역사에 선을 그어야 합니다. 고맙습니다.
파일:
line.mq4  3 kb
 
prom18 :
도와주세요, 제발. 표시기는 전날의 고가와 저가 선을 그립니다. 그는 매일 역사에 선을 그어야 합니다. 고맙습니다.
파일:
line_1.mq4  3 kb
 
bistreevseh :

정말 감사합니다. 노력하겠습니다. "래퍼"에 대한 기사를 찾고 표시기 코드를 변환하는 데 도움을 주시겠습니까? 이것을 검색어로 해석할 수 없을 것 같습니다.


https://www.mql5.com/ru/forum/114117 다음은 표시기 신호를 해석하기 위한 래퍼 함수를 만드는 예입니다.

다음은 표시기 코드 사용에 대한 문서입니다.

https://www.mql5.com/ru/articles/1456

https://www.mql5.com/ru/articles/1457

 
Vinin :



고맙습니다!
 
VladislavVG :


https://www.mql5.com/ru/forum/114117 다음은 표시기 신호를 해석하기 위한 래퍼 함수를 만드는 예입니다.

다음은 표시기 코드 사용에 대한 문서입니다.

https://www.mql5.com/ru/articles/1456

https://www.mql5.com/ru/articles/1457


다시 한 번, 대단히 감사합니다
사유: