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

 
shtr :

우와!!! 고맙습니다! 이것은 반성이 필요합니다.

어딘가에 새로운 규칙에 대한 "자습서"가 있습니까? 4자리 페이지번호가 좀 거슬립니다...

그리고 지금 누구에게 쉬운가요 ... 아카이브에 신규 이민자에 대한 5 가지 주제가 더 있습니다)))

솔직히 말해서, C++ 프로그래밍 경험이 이미 있는 경우 도움말 및 코드 기반의 예제로 충분합니다. 경험이 전혀 없다면 C ++ 튜토리얼을 먼저 공부할 수 있습니다. MQL은 구문이 매우 유사합니다.

 
evillive :

그리고 지금 누구에게 쉬운가요 ... 아카이브에 신규 이민자에 대한 5 가지 주제가 더 있습니다)))

솔직히 말해서, C++ 프로그래밍 경험이 이미 있는 경우 도움말 및 코드 기반의 예제로 충분합니다. 경험이 전혀 없다면 C ++ 튜토리얼을 먼저 공부할 수 있습니다. MQL은 구문이 매우 유사합니다.

string 경험 없음 = C++ 교과서; )))

도와주셔서 감사합니다!

 

좋은 오후입니다, 사랑하는 여러분!

통화 쌍을 나타내는 화살표가 나타날 때 표시기에 경고를 추가하도록 도와주세요.

제가 직접 해보았지만 말씀하신대로 모르고 잊어버리기가 어렵습니다. 미리 감사드립니다.



#속성 표시기_차트_창

#속성 표시기_버퍼 4

#property indicator_color1 흰색

#property indicator_color2 흰색

#property indicator_color3 라이트그린

#property indicator_color4 빨간색


외부 정수 CountBars = 300;

extern string FS = " ** 필터 감도: 높음 <-[1..3]-> 낮음 ** ";

extern int 감도 = 2;

이중 g_ibuf_92[];

이중 g_ibuf_96[];

이중 g_ibuf_100[];

이중 g_ibuf_104[];

정수 gi_unused_108 = -1;


정수() {

표시기버퍼(4);

SetIndexStyle(2, DRAW_ARROW);

SetIndexArrow(2, 233);

SetIndexBuffer(2, g_ibuf_92);

SetIndexStyle(3, DRAW_ARROW);

SetIndexArrow(3, 234);

SetIndexBuffer(3, g_ibuf_96);

SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 3, 흰색);

SetIndexBuffer(0, g_ibuf_100);

SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 3, 흰색);

SetIndexBuffer(1, g_ibuf_104);

SetIndexEmptyValue(0, 0);

SetIndexEmptyValue(1, 0);

SetIndexEmptyValue(2, 0);

SetIndexEmptyValue(3, 0);

SetIndexLabel(2, "매수 신호");

SetIndexLabel(3, "매도 신호");

SetIndexLabel(0, "높음");

SetIndexLabel(1, "낮음");

SetIndexEmptyValue(0, EMPTY_VALUE);

SetIndexEmptyValue(1, EMPTY_VALUE);

SetIndexEmptyValue(2, EMPTY_VALUE);

SetIndexEmptyValue(3, EMPTY_VALUE);

string ls_0 = "스캘퍼 신호";

IndicatorShortName(ls_0);

if (감도 < 1) 감도 = 1;

if (감도 > 3) 감도 = 3;

리턴(0);

}


정수 초기화() {

리턴(0);

}


이중 판매 신호(int ai_0) {

부울 li_4 = 참;

if (감도 > 2)

if (iHigh(Symbol(), Period(), ai_0 + 6) >= iHigh(Symbol(), Period(), ai_0 + 5)) li_4 = FALSE;

if (감도 > 1)

if (iHigh(Symbol(), Period(), ai_0 + 5) >= iHigh(Symbol(), Period(), ai_0 + 4)) li_4 = FALSE;

if (감도 > 0)

if (iHigh(Symbol(), Period(), ai_0 + 4) >= iHigh(Symbol(), Period(), ai_0 + 3)) li_4 = FALSE;

if (li_4) {

if (iClose(Symbol(), Period(), ai_0 + 2) < iHigh(Symbol(), Period(), ai_0 + 3))

if (iClose(Symbol(), Period(), ai_0 + 1) < iLow(Symbol(), Period(), ai_0 + 3)) return (iHigh(Symbol(), Period(), ai_0 + 3) + 10.0 *가리키다);

}

리턴(0);

}


이중 구매 신호(int ai_0) {

부울 li_4 = 참;

if (감도 > 2)

if (iLow(Symbol(), Period(), ai_0 + 6) <= iLow(Symbol(), Period(), ai_0 + 5)) li_4 = FALSE;

if (감도 > 1)

if (iLow(Symbol(), Period(), ai_0 + 5) <= iLow(Symbol(), Period(), ai_0 + 4)) li_4 = FALSE;

if (감도 > 0)

if (iLow(Symbol(), Period(), ai_0 + 4) <= iLow(Symbol(), Period(), ai_0 + 3)) li_4 = FALSE;

if (li_4) {

if (iClose(Symbol(), Period(), ai_0 + 2) > iLow(Symbol(), Period(), ai_0 + 3))

if (iClose(Symbol(), Period(), ai_0 + 1) > iHigh(Symbol(), Period(), ai_0 + 3)) return (iLow(Symbol(), Period(), ai_0 + 3) - 10.0 *가리키다);

}

리턴(0);

}


정수 시작() {

int li_0 = IndicatorCounted();

if (li_0 < 0) return (-1);

if (li_0 > 0) li_0--;

int li_4 = 막대 - li_0;

(int l_count_8 = 0; l_count_8 < li_4; l_count_8++) {

g_ibuf_92[l_count_8 + 3] = buySignal(l_count_8);

g_ibuf_96[l_count_8 + 3] = 판매 신호(l_count_8);

if (buySignal(l_count_8) > 0.0 || SellSignal(l_count_8) > 0.0) {

g_ibuf_100[l_count_8 + 3] = iHigh(Symbol(), Period(), l_count_8 + 3);

g_ibuf_104[l_count_8 + 3] = iLow(Symbol(), Period(), l_count_8 + 3);

}

}

리턴(0);

}

 

안녕하세요 채굴기입니다.

어떤 종류의 곡률은 주문의 역사 에서 결과의 정의와 함께 나옵니다.

전략:

1-2 주문은 짧은 스탑과 긴 이익으로 서로 다른 방향으로 열립니다(사실상 잠금).

2-가격이 자신 있게 범위를 벗어나면 주문 중 하나의 정지를 무너뜨리고 다른 주문에서 긴 이익을 얻습니다.

3-주문 중 하나의 스톱이 넉다운되는 순간, 시작 수준에서 지연이 설정되고 가격이 반환되면 주문이 다시 열립니다.

그리고 다음 움직임까지 잠금 상태로 돌아가서 짧은 스탑에서 노크 아웃을 통해 이익을 얻습니다.

일:

4번째 레이에서 Martin이 켜지기 때문에 트랙 3은 정지 합니다. 문제는 뭔가 잘못되고 있다는 것입니다. 나는 OrderProfit()의 이력에서 주문의 수익성을 결정하고,

그러나 나는 여전히 OrdersHistoryTotal()이 어떻게 작동하는지 이해하지 못합니다. 함수가 일련 번호를 보든 주문 수량을 보든 어떻게 인식하는지 이해하지 못합니다.

보증금의 제거(손실 또는 전혀 아님). 이런 상황에서 3연패 기록을 정확히 추적하는 방법은 무엇일까? 히스토리에 적자 말고도 다른 일들이 많을 텐데?

 
Fartarantula :

안녕하세요 채굴기입니다.

어떤 종류의 곡률은 주문의 역사에서 결과의 결정과 함께 나옵니다.

전략:

1-2 주문은 짧은 정지와 긴 이익으로 다른 방향으로 열립니다(사실상 잠금).

2-가격이 자신 있게 범위를 벗어나면 주문 중 하나를 중단하고 다른 주문에서 매수 이익을 얻습니다.

3-주문 중 하나의 스톱이 넉다운되는 순간, 시작 수준에서 지연이 설정되고 가격이 반환되면 주문이 다시 열립니다.

그리고 다음 움직임까지 잠금 상태로 돌아가서 짧은 스탑에서 노크 아웃을 통해 이익을 얻습니다.

일:

트랙 3은 스톱 킥, 4번째 레이에서 Martin이 켜지기 때문입니다. 문제는 뭔가 잘못되고 있다는 것입니다. 나는 OrderProfit()의 이력에서 주문의 수익성을 결정합니다.

그러나 나는 여전히 OrdersHistoryTotal()이 어떻게 작동하는지 이해하지 못합니다. 함수가 일련 번호를 보든 주문 수량을 보든 어떻게 인식하는지 이해하지 못합니다.

보증금 제거(손실 또는 전혀 아님). 손실 외에도 역사상 많은 다른 것들이있을 때 이러한 상황에서 3 연속 손실을 정확히 추적하는 방법은 무엇입니까?

기억해야 할 첫 번째 사항은 보류 중인 주문 이 수익성이 없는 것이 아니라 작동했거나 삭제되었다는 것입니다.

손실은 시장 주문(매수, 매도)에서 살펴보아야 합니다.

OrdersHistoryTotal()은 사용 가능한 거래 내역의 모든 주문 수를 반환합니다(표시 모드가 "모든 내역"인 경우 계정에서 입출금 포함). 숫자 0은 일반적으로 계좌 개설 후 잔액 보충, 즉 첫 번째 주문입니다. number OrdersHistoryTotal()-1 - 기록의 마지막 주문.

즉, 지연과 수익성없는 주문을 동시에 계산하면서 마지막에서 첫 번째까지주기의 주문을 통과해야합니다.

그러나 가격이 다시 스탑으로 청산되고 시장에서 즉시 열리는 주문 수준에 도달할 때까지 기다릴 수 있다면 왜 보류를 전혀 보류합니까? 연기 - 이 경우 추가 링크는 계정에 혼란을 야기합니다.

 
Fartarantula : 전략:

1-2 주문은 짧은 스탑과 긴 이익으로 서로 다른 방향으로 열립니다(사실상 잠금).

2-가격이 자신 있게 범위를 벗어나면 주문 중 하나의 정지를 무너뜨리고 다른 주문에서 긴 이익을 얻습니다.

프로그래머의 눈으로 전략을 살펴보았습니다. 가격이 상승하여 SL Sell에 도달하면 하나의 Buy 주문이 SL과 TP가 상단 어딘가에 남아 있습니다. 동시에 마감된 주문에서 약간의 손실을 입었습니다. 이제 두 가지 지연이 있는 옵션을 살펴보겠습니다. 2개의 주문을 여는 대신 SL이 있던 바로 그 위치에 2개의 주문을 보류 중입니다. 가격이 Buy Stopl 에 도달하면 구매 주문이 열리고 동일한 위치가 획득되지만 손실은 없습니다. 그리고 지금 가장 흥미로운. 가격이 오르면서..

 

...원칙대로 가격이 올라갈수록 TP는 더 높아집니다. 그리고 우리가 현재의 행동을 고려한다면 당신은 나보다 이익을 얻을 기회가 적습니다.

그리고 당신이 저와 병행하여 거래하지 않더라도, 당신의 기준 가격은 정리해고 사이에 있고, 사실 내 가격은 그렇습니다. 그리고 항상 그럴 것입니다 - 당신은 방향성 움직임의 시장 부분을 제공합니다.

모른다면 스프레드의 불행한 2포인트라도 긍정적인 시스템에서 패배하는 시스템을 만든다는 점을 명심하십시오. 첫 번째 사진으로 판단하면 5-sign에 약 20포인트의 스프레드가 있고,

그림에 따르면 "눈으로" 동시 주문의 차이가 40 포인트이기 때문입니다.

그것은 요점이 아닙니다 ... 일련의 3 히트 스톱을 올바르게 식별하려면 코드 조각이 필요합니다. 왜 모두가 시스템을 수정하려고 노력합니까? 그리고 위의 동지의 기술

맞지도 않습니다. 시장에 따르면 그들은 단순히 열리지 않거나 필요하지 않은 곳에서 열 것입니다. 젠장, 나는 당신 모두와 당신의 경험을 공유하려는 당신의 욕망을 완벽하게 이해합니다. 그러나 나는 단지 3개의 정거장을 추적해야 합니다.

모든 것이 이미 연고에 있습니다. 나는 우연히 두 배로 잘못된 주문이 빠져 나가는 것을 보았습니다. 알고보니 히스토리토탈은 필요하다고 판단되는 모든 것을 내놓았고, 히스토리의 손실로 마감된 주문을 결정하는 주기는 그 주문을 건너뛰었다.

 
Fartarantula 모든 것이 이미 연고에 있습니다. 나는 우연히 이중으로 잘못된 주문이 빠져 나가는 것을 보았습니다. 결과적으로 Historitotal은 필요하다고 판단되는 모든 것을 발행했으며 , 이력 손실로 마감 주문을 결정하는 주기는 해당 주문을 놓쳤습니다.

코더의 자격에서 벗어나 프로그래밍의 기초를 이해하는 것이 필요하다. 여기 더... 그리고 여기

다음은 작업입니다. 저자가 말했듯이 일요일에 같은 계정으로 이 대본에서 Historitotal 을 반환합니다.

 void OnStart ()
{
   Alert ( "Cчет " + DoubleToStr(AccountNumber(), 0 ),
         "  Дата " , TimeToStr( TimeLocal (), TIME_DATE ),
         "  Ордеров " , OrdersHistoryTotal());
}

왜 다르게?

하나의 계정이지만 더 많거나 적은 주문이 있습니까? 0 228 228 216 98 ? 하지만 주문이 적을수록 처리가 빨라집니다!!!

클라이언트는 땀을 흘립니다. 작업이 불가능하고, 터미널이 버그가 있고, Historitotal 이 원하는 것을 제공하고 사이클을 타고 놓쳤습니다!

 

모두에게 좋은 하루. 표시기의 화살표를 높이는 데 도움이 됩니다. 아래쪽 화살표는 정상이고 위쪽 화살표는 양초 위에 있습니다.

시도한 ObjectSet(Arrow_name_jack1, OBJPROP_YDISTANCE,20); 작동하지 않았습니다. 위쪽 에 있는 화살표(오브젝트)의 기준점 , 위로 이동하는 방법은?

 //display signal arrow 
      RefreshRates(); 
   
       if (   (High[i+ 1 ]  >upBuffer[i+ 1 ] ) 
         && (Close[i+ 1 ] >Open[i+ 1 ]     ) 
         && (Close[i]   <Open[i]       ) 
        )            
      {   //draw a dot on top of the bar
         string Arrow_name_jack1 = "AboveTopBand_SellBar_jack1_" + TimeToStr(Time[i], TIME_DATE | TIME_SECONDS );   //TimeCurrent()
         ObjectCreate (Arrow_name_jack1, OBJ_ARROW , 0 , Time[i], High[i]+ iATR ( NULL , 0 , 20 ,i)/ 5 ); //5*pips);  //OBJ_ARROW=22,window=0,
//???????????? так не получилось         //  ObjectSet(Arrow_name_jack1, OBJPROP_YDISTANCE,20);
            ObjectSet(Arrow_name_jack1, OBJPROP_ARROWCODE , 242           );   //159
            ObjectSet(Arrow_name_jack1, OBJPROP_COLOR ,     Yellow    );   //Magenta
            ObjectSet(Arrow_name_jack1, OBJPROP_STYLE ,     STYLE_SOLID   );
            ObjectSet(Arrow_name_jack1, OBJPROP_WIDTH ,     2             ); 
            
      }
       else
       if (   (Low[i+ 1 ]   <dnBuffer[i+ 1 ] ) 
          && (Close[i+ 1 ] <Open[i+ 1 ]     ) 
          && (Close[i]   >Open[i]       ) 
         )            
      {   //draw a dot on top of the bar
          Arrow_name_jack1 = "BelowBotBand_BuyBar_jack1_" + TimeToStr(Time[i], TIME_DATE | TIME_SECONDS ); //TimeCurrent()
         ObjectCreate (Arrow_name_jack1, OBJ_ARROW , 0 , Time[i], Low[i]- iATR ( NULL , 0 , 20 ,i)/ 5 ); //5*pips);  //OBJ_ARROW=22,window=0,
            ObjectSet(Arrow_name_jack1, OBJPROP_ARROWCODE , 241           ); //159
            ObjectSet(Arrow_name_jack1, OBJPROP_COLOR ,     Yellow   ); //Magenta
            ObjectSet(Arrow_name_jack1, OBJPROP_STYLE ,     STYLE_SOLID   );
            ObjectSet(Arrow_name_jack1, OBJPROP_WIDTH ,     2             ); 
      }
   } //end for(i = limit; i >= 0; i--)
 
mikanit :

모두에게 좋은 하루. 표시기의 화살표를 높이는 데 도움이 됩니다. 아래쪽 화살표는 정상이고 위쪽 화살표는 양초 위에 있습니다.

시도한 ObjectSet(Arrow_name_jack1, OBJPROP_YDISTANCE,20); 작동하지 않았습니다. 위쪽에 있는 화살표(오브젝트)의 기준점, 위로 이동하는 방법은?

ObjectSetInteger (0, Arrow_name_jack1 , OBJPROP_ANCHOR , ANCHOR_BOTTOM );

혼동을 피하기 위해 별도의 변수를 사용하여 위쪽 및 아래쪽 화살표의 이름을 저장하는 것이 좋습니다.

그리고 예, 개체와 함께 표시기에 화살표를 그리는 것은 변태입니다. 표시기 버퍼도 있습니다.

SetIndexStyle(0,DRAW_ARROW,0,1,clrRed);

    SetIndexArrow(0,242);