WATR 지표를 기준으로 어드바이저를 작성해 주세요(어드바이저 코드는 아래에 있음). 인디케이터가 회전하면 열린 주문이 닫히고(SL 또는 TP로 닫히지 않은 경우) 새 주문이 인디케이터가 가리키는 방향으로 열립니다. 주문은 반전 지점에서 정확히 하나만 열립니다. 그런 다음 우리는 고문의 다음 반전까지 기다립니다.
입력 매개변수: 로트 크기, SL, TP, 미끄러짐. 잊지 않은 것 같아요 :)
진심으로, 스베틀라나. ICQ 320355718
표시기 코드:
//+----------------------------------------------- --------------------+ //| WATR.mq4 | //| 기사 konkop 아래에 작성된 WizardSerg | //| "현대 무역" #4/2001 | //| http://www.wizardserg.inweb.ru | //| Wizardserg@mail.ru | //+----------------------------------------------- --------------------+ #property copyright "Written WizardSerg under article konkop in <Modern trading> #4/2001" #속성 링크 "http://www.wizardserg.inweb.ru" //---- #속성 표시기_차트_창 #속성 표시기_버퍼 2 #property indicator_color1 산호 #property indicator_color2 다저블루 //---- 입력 매개변수 외부 정수 WATR_K = 10; 외부 이중 WATR_M = 4.0; 외부 정수 ATR = 21; //---- 버퍼 이중 ExtMapBufferUp[]; 이중 ExtMapBufferDown[]; //+----------------------------------------------- --------------------+ //| 사용자 지정 표시기 초기화 기능 | //+----------------------------------------------- --------------------+ 정수 초기화() { 표시기버퍼(2); SetIndexBuffer(0, ExtMapBufferUp); ArraySetAsSeries(ExtMapBufferUp, true); SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2); SetIndexBuffer(1, ExtMapBufferDown); ArraySetAsSeries(ExtMapBufferDown, true); SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2); IndicatorShortName("WATR(" + WATR_K + ", " + WATR_M + ")"); SetIndexLabel(0, "WATR_Up"); SetIndexLabel(1, "WATR_Dn"); 리턴(0); } //+----------------------------------------------- --------------------+ //| 사용자 지정 표시기 초기화 해제 기능 | //+----------------------------------------------- --------------------+ 정수 초기화() { //---- 리턴(0); } //+----------------------------------------------- --------------------+ //| 사용자 지정 표시기 기능 | //+----------------------------------------------- --------------------+ bool AntiTrendBar(int i) { bool res = (TrendUp(i) && (닫기[i] < 열기[i])) || (!TrendUp(i) && (닫기[i] > 열기[i])); 반환(res); } //+----------------------------------------------- --------------------+ //| 사용자 지정 표시기 기능 | //+----------------------------------------------- --------------------+ 이중 CalcIndicValue(int i, bool 추세) { 이중 해상도 = 닫기[i]; 만약(추세) res -= (WATR_K*포인트 + WATR_M*iATR(NULL, 0, ATR, i)); 또 다른 res += (WATR_K*포인트 + WATR_M*iATR(NULL, 0, ATR, i)); 반환(res); } //+----------------------------------------------- --------------------+ //| 사용자 지정 표시기 기능 | //+----------------------------------------------- --------------------+ bool TrendUp(int i) { return((닫기[i+1] > ExtMapBufferUp[i+1]) && (ExtMapBufferUp[i+1] != EMPTY_VALUE)); } //+----------------------------------------------- --------------------+ //| 사용자 지정 표시기 반복 기능 | //+----------------------------------------------- --------------------+ 정수 시작() { 정수 제한; 정수 counted_bars = IndicatorCounted(); //---- 마지막으로 계산된 막대가 다시 계산됩니다. //---- 첫 번째 지표 값 == 가격-1 포인트, // 즉, 추세가 상승하는 것으로 간주합니다. ExtMapBufferUp[막대] = 닫기[막대] - WATR_K*Point; // 제한 = (counted_bars > 0) ? (막대 - counted_bars) : (막대 - 1); 제한 = 막대 - counted_bars; //---- 메인 루프 for(int i = 한계; i >= 0; i--) { if(AntiTrendBar(i)) { ExtMapBufferUp[i] = ExtMapBufferUp[i+1]; ExtMapBufferDown[i] = ExtMapBufferDown[i+1]; } 또 다른 { if(트렌드업(i)) { ExtMapBufferUp[i] = CalcIndicValue(i, true); if(ExtMapBufferUp[i] < ExtMapBufferUp[i+1]) ExtMapBufferUp[i] = ExtMapBufferUp[i+1]; ExtMapBufferDown[i] = EMPTY_VALUE; } 또 다른 { ExtMapBufferDown[i] = CalcIndicValue(i, false); if(ExtMapBufferDown[i] > ExtMapBufferDown[i+1]) ExtMapBufferDown[i] = ExtMapBufferDown[i+1]; ExtMapBufferUp[i] = EMPTY_VALUE; } } // 가격 교차점 if(TrendUp(i) && (닫기[i] < ExtMapBufferUp[i])) { ExtMapBufferDown[i] = CalcIndicValue(i, false); ExtMapBufferUp[i] = EMPTY_VALUE; } if((!TrendUp(i)) && (닫기[i] > ExtMapBufferDown[i])) { ExtMapBufferUp[i] = CalcIndicValue(i, true); ExtMapBufferDown[i] = EMPTY_VALUE; } } 반환(0); } //+----------------------------------------------- --------------------+
externdouble RISK =20;
lotsize =MarketInfo(Symbol(),MODE_LOTSIZE)*0.01;
Balance =AccountBalance()*( RISK /100);
lots =NormalizeDouble( Balance / lotsize ,2);// - это и есть лот для открытия позиции
유효하지 않은 함수 매개변수입니다. OrderClose() 함수에 정확히 무엇을 전달하는지 확인하십시오.
확인해보니 .. 뭐가 문제인지 정말 모르겠어.. 이것저것 많이 해봤는데 %(
다시 좋은 저녁입니다 :)
새로운 요청으로. 아직 내 스스로 해결할 수 없다는 것을 깨달았다.
WATR 지표를 기준으로 어드바이저를 작성해 주세요(어드바이저 코드는 아래에 있음). 인디케이터가 회전하면 열린 주문이 닫히고(SL 또는 TP로 닫히지 않은 경우) 새 주문이 인디케이터가 가리키는 방향으로 열립니다. 주문은 반전 지점에서 정확히 하나만 열립니다. 그런 다음 우리는 고문의 다음 반전까지 기다립니다.
입력 매개변수: 로트 크기, SL, TP, 미끄러짐. 잊지 않은 것 같아요 :)
진심으로, 스베틀라나. ICQ 320355718
표시기 코드:
//+----------------------------------------------- --------------------+
//| WATR.mq4 |
//| 기사 konkop 아래에 작성된 WizardSerg |
//| "현대 무역" #4/2001 |
//| http://www.wizardserg.inweb.ru |
//| Wizardserg@mail.ru |
//+----------------------------------------------- --------------------+
#property copyright "Written WizardSerg under article konkop in <Modern trading> #4/2001"
#속성 링크 "http://www.wizardserg.inweb.ru"
//----
#속성 표시기_차트_창
#속성 표시기_버퍼 2
#property indicator_color1 산호
#property indicator_color2 다저블루
//---- 입력 매개변수
외부 정수 WATR_K = 10;
외부 이중 WATR_M = 4.0;
외부 정수 ATR = 21;
//---- 버퍼
이중 ExtMapBufferUp[];
이중 ExtMapBufferDown[];
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
표시기버퍼(2);
SetIndexBuffer(0, ExtMapBufferUp);
ArraySetAsSeries(ExtMapBufferUp, true);
SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);
SetIndexBuffer(1, ExtMapBufferDown);
ArraySetAsSeries(ExtMapBufferDown, true);
SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2);
IndicatorShortName("WATR(" + WATR_K + ", " + WATR_M + ")");
SetIndexLabel(0, "WATR_Up");
SetIndexLabel(1, "WATR_Dn");
리턴(0);
}
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 초기화 해제 기능 |
//+----------------------------------------------- --------------------+
정수 초기화()
{
//----
리턴(0);
}
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 기능 |
//+----------------------------------------------- --------------------+
bool AntiTrendBar(int i)
{
bool res = (TrendUp(i) && (닫기[i] < 열기[i])) ||
(!TrendUp(i) && (닫기[i] > 열기[i]));
반환(res);
}
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 기능 |
//+----------------------------------------------- --------------------+
이중 CalcIndicValue(int i, bool 추세)
{
이중 해상도 = 닫기[i];
만약(추세)
res -= (WATR_K*포인트 + WATR_M*iATR(NULL, 0, ATR, i));
또 다른
res += (WATR_K*포인트 + WATR_M*iATR(NULL, 0, ATR, i));
반환(res);
}
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 기능 |
//+----------------------------------------------- --------------------+
bool TrendUp(int i)
{
return((닫기[i+1] > ExtMapBufferUp[i+1]) &&
(ExtMapBufferUp[i+1] != EMPTY_VALUE));
}
//+----------------------------------------------- --------------------+
//| 사용자 지정 표시기 반복 기능 |
//+----------------------------------------------- --------------------+
정수 시작()
{
정수 제한;
정수 counted_bars = IndicatorCounted();
//---- 마지막으로 계산된 막대가 다시 계산됩니다.
//---- 첫 번째 지표 값 == 가격-1 포인트,
// 즉, 추세가 상승하는 것으로 간주합니다.
ExtMapBufferUp[막대] = 닫기[막대] - WATR_K*Point;
// 제한 = (counted_bars > 0) ? (막대 - counted_bars) : (막대 - 1);
제한 = 막대 - counted_bars;
//---- 메인 루프
for(int i = 한계; i >= 0; i--)
{
if(AntiTrendBar(i))
{
ExtMapBufferUp[i] = ExtMapBufferUp[i+1];
ExtMapBufferDown[i] = ExtMapBufferDown[i+1];
}
또 다른
{
if(트렌드업(i))
{
ExtMapBufferUp[i] = CalcIndicValue(i, true);
if(ExtMapBufferUp[i] < ExtMapBufferUp[i+1])
ExtMapBufferUp[i] = ExtMapBufferUp[i+1];
ExtMapBufferDown[i] = EMPTY_VALUE;
}
또 다른
{
ExtMapBufferDown[i] = CalcIndicValue(i, false);
if(ExtMapBufferDown[i] > ExtMapBufferDown[i+1])
ExtMapBufferDown[i] = ExtMapBufferDown[i+1];
ExtMapBufferUp[i] = EMPTY_VALUE;
}
}
// 가격 교차점
if(TrendUp(i) && (닫기[i] < ExtMapBufferUp[i]))
{
ExtMapBufferDown[i] = CalcIndicValue(i, false);
ExtMapBufferUp[i] = EMPTY_VALUE;
}
if((!TrendUp(i)) && (닫기[i] > ExtMapBufferDown[i]))
{
ExtMapBufferUp[i] = CalcIndicValue(i, true);
ExtMapBufferDown[i] = EMPTY_VALUE;
}
}
반환(0);
}
//+----------------------------------------------- --------------------+
실례지만, 다음 작업(예: 첫 번째 로트)에 대한 코드를 작성해 주시겠습니까? 0.1, 다음 각각은 주어진 양만큼 증가합니다.
미리 감사드립니다
이 포럼을 검색하십시오. 이것은 이미 요청되고 작성되었습니다 ...
어쨌든, 같은 것이 있습니다 ...
이 포럼을 검색하십시오. 이것은 이미 요청되고 작성되었습니다 ...
감사합니다. 지금 세 시간 동안 포럼을 삽질하고 있었고 많은 것을 찾았지만 이것은 현재가 아닙니다(
이 포럼을 검색하십시오. 이것은 이미 요청되고 작성되었습니다 ...
그리고 코드는 아마도 최대 10개일 것입니다.
그러나 여기에서 아마도 프로는 작은 것을 교환하지 않을 것입니다 (
그리고 코드는 아마도 최대 10개일 것입니다.
그러나 여기에서 아마도 프로는 작은 것을 교환하지 않을 것입니다 (
적어도 대략적으로는 아니지만 누군가가 그 일을 맡을 수 있도록 구체적으로 공식화하는 것이 좋을 것입니다.
그리고 코드는 아마도 최대 10개일 것입니다.
그러나 여기에서 아마도 프로는 작은 것을 교환하지 않을 것입니다 (
질문을 올바르게 공식화하십시오. 사전 주문, 후속 주문. 무엇에서 먼저? Unih 시대의 시작부터, 아니면 그리스도의 재림의 날부터, 또는 세상이 창조된 순간부터, 아니면 아침을 먹고 걷는 순간부터? 어떤 질문과 대답.
그리고 코드는 아마도 10개의 최대 용어일 것입니다.
그러나 여기에서 아마도 프로는 작은 것을 교환하지 않을 것입니다 (
적어도 대략적으로는 아니지만 누군가가 그 일을 맡을 수 있도록 구체적으로 공식화하는 것이 좋을 것입니다.
확인. 첫 번째 로트 로트로 구매 0.1. 이에 대한 응답으로 SellStop은 즉시 20포인트 아래에 0.2로 배치됩니다(즉, 0.1 증가).
또한 Sell이 이에 대한 응답으로 작동하면 Baystop을 0.3으로 설정하고(즉, LAST 로트를 다시 0.1씩 증가) 원칙적으로 이런 식으로 진행합니다.
로트의 증가 규모는 재량에 따라 조정하는 것이 중요합니다.
두 가지 흥미로운 옵션이 있습니다. 덧셈과 곱셈.
어, 그런 것 같다)
코드는 로트를 늘릴 뿐만 아니라 줄입니다. 모든 것이 디포에 의존하고 디포가 커집니다.
창고 크기는 중요하지 않습니다