MQL 4 프로그래머를 위한 질문과 답변 - 페이지 4

 

지금은 다음과 같습니다.

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

//| Fibo.mq4 거래 |

//| 미노디 |

//| minodi@yandex.ru |

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

#property copyright "미노디"

#속성 링크 "minodi@yandex.ru"


외부 정수 period_EMA = 233,

period_SMA = 233,

손절매 = 30,

외부 이중 로트 = 0.01;

외부 문자열 SesEnd ="22:00"; // 높거나 낮은 경계 시간

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

//| 스크립트 프로그램 시작 기능 |

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

정수 시작()

{

//------- 일일 가격, Fibs 및 Hi-Lo 드로잉 시간-------------+

정수 시프트 = iBarShift(NULL,1440,시간[0]) + 1;

더블 하이프라이스 = iHigh(NULL,1440,shift); // 높은 가격

더블 LoPrice =iLow(NULL,1440,shift); // 저렴한 가격

이중 OpPrice =iOpen(NULL,1440,시프트); // 오픈 가격

더블 ClPrice = iClose(NULL,1440,shift); // 종가

날짜 시간 StTime = iTime(NULL,1440,shift); // ??

if(TimeDayOfWeek(StTime)==0/*일요일*/)

{//금요일 높음 및 낮음 추가

HiPrice = MathMax(HiPrice,iHigh(NULL,1440,shift+1));

LoPrice = MathMin(LoPrice,iLow(NULL,1440,shift+1));

OpPrice = iOpen(NULL,1440,shift+1);

ClPrice = iClose(NULL,1440,shift+1);

}

이중 피벗 =(HiPrice+LoPrice+ClPrice)/3;

이중 범위 = HiPrice-LoPrice;

이중 Fibo138 = 1.382*Range+LoPrice;

이중 Fibo162 = 1.618*Range+LoPrice;

이중 Fibo_138 = LoPrice-(1.382*Range-Range);

이중 Fibo_162 = LoPrice-(1.618*Range-Range);

//----------------높은 시간과 낮은 시간 ---------------------- ------ -------+

int HiTime, LoTime;

정수 시간; // 다음 막대에서 값을 비활성화합니다.


if (시간!=시간[0]){HiTime=0;LoTime=0;time=시간[0];}

if (High[0]>HiPrice)HiTime=TimeCurrent();

if (낮음[0]<LoPrice)LoTime=TimeCurrent();


Comment("이 막대에서:"+"\n 최고시점="+HiTime+"\n 최저시점="+LoTime);

//-----------------표시 가격대----------------------- ---+

int currDay, i=0; //

if (currDay!=TimeDay(시간[i]))

{

if (ClPrice<OpPrice) double x=(HiPrice + LoPrice + ClPrice + LoPrice)/2;

if (ClPrice>OpPrice) x=(HiPrice + LoPrice + ClPrice + HiPrice)/2;

if (ClPrice==OpPrice) x=(HiPrice + LoPrice + ClPrice + ClPrice)/2;

나는 ++;

}

이중 MaxDay = x - LoPrice; // 가격대 표시

이중 MinDay = x - HiPrice; // 가격대 표시

// -----------이동 평균------------------------------------ ----------+

이중 EMA = iMA(15,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0);

이중 SMA = iMA(15,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);

이중 EMA1 = iMA(60,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0);

이중 SMA1 = iMA(60,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);

//----------------어제 주문 삭제----------------------- ----+

//----주문----------------------- ------ ------------------+

 

포럼 사용자 여러분, 코드를 확인하십시오. 점진적으로 추가할 계획입니다.

 

이것들은 시작하기 전에 내가 준 매개 변수입니다.


int HiTime,LoTime;

int time; // на следующем баре обнкляем значения

 
안녕하세요 친애하는 프로그래머 ! 초보자에게 가능한 경우 스크립트(전문가 고문이 아님)를 작성하여 거래 주문을 하고 동시에 최소 수준에서 이에 대한 추적 중지 기능을 켜도록 하는 방법을 알려주십시오. 아마도 준비된 것이 있고 가능하다면 링크가 있습니다.
 
Vladon >> :

이것들은 시작하기 전에 내가 준 매개 변수입니다.


int HiTime,LoTime;

int time; // на следующем баре обнкляем значения


움직이는. 다른건 다 정상인가요?
 

포럼 사용자 여러분, 주의를 기울이고 실수에 대해 말씀해 주십시오.

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

//| Fibo.mq4 거래 |

//| 미노디 |

//| minodi@yandex.ru |

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

#property copyright "미노디"

#속성 링크 "minodi@yandex.ru"


외부 정수 period_EMA = 233,

period_SMA = 233,

손절매 = 30,

마법 = 55;

외부 이중 로트 = 0.01;

외부 문자열 SesEnd ="22:00"; // 높거나 낮은 경계 시간


int HiTime, LoTime;

정수 시간; // 다음 막대에서 값을 비활성화합니다.


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

//| 스크립트 프로그램 시작 기능 |

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

정수 시작()

{

//------- 일일 가격, Fibs 및 Hi-Lo 드로잉 시간-------------+

정수 시프트 = iBarShift(NULL,1440,시간[0]) + 1;

더블 하이프라이스 = iHigh(NULL,1440,shift); // 높은 가격

더블 LoPrice =iLow(NULL,1440,shift); // 저렴한 가격

이중 OpPrice =iOpen(NULL,1440,시프트); // 오픈 가격

더블 ClPrice = iClose(NULL,1440,shift); // 종가

날짜 시간 StTime = iTime(NULL,1440,shift); // ??

if(TimeDayOfWeek(StTime)==0/*일요일*/)

{//금요일 높음 및 낮음 추가

HiPrice = MathMax(HiPrice,iHigh(NULL,1440,shift+1));

LoPrice = MathMin(LoPrice,iLow(NULL,1440,shift+1));

OpPrice = iOpen(NULL,1440,shift+1);

ClPrice = iClose(NULL,1440,shift+1);

}

이중 피벗 =(HiPrice+LoPrice+ClPrice)/3;

이중 범위 = HiPrice-LoPrice;

이중 Fibo138 = 1.382*범위;

이중 Fibo162 = 1.618*범위;

이중 Fibo_138 =(LoPrice-1.382*Range)-범위;

이중 Fibo_162 =(LoPrice-1.618*Range)-범위;

//----------------높은 시간과 낮은 시간 ---------------------- ------ -------+


if (시간!=시간[0]){HiTime=0;LoTime=0;time=시간[0];}

if (High[0]>HiPrice)HiTime=TimeCurrent();

if (낮음[0]<LoPrice)LoTime=TimeCurrent();


Comment("이 막대에서:"+"\n 최고시점="+HiTime+"\n 최저시점="+LoTime);

//-----------------표시 가격대----------------------- ---+

int currDay, i=0; //

if (currDay!=TimeDay(시간[i]))

{

if (ClPrice<OpPrice) double x=(HiPrice + LoPrice + ClPrice + LoPrice)/2;

if (ClPrice>OpPrice) x=(HiPrice + LoPrice + ClPrice + HiPrice)/2;

if (ClPrice==OpPrice) x=(HiPrice + LoPrice + ClPrice + ClPrice)/2;

나는 ++;

}

이중 MaxDay = x - LoPrice; // 가격대 표시

이중 MinDay = x - HiPrice; // 가격대 표시

// -----------이동 평균------------------------------------ ----------+

이중 EMA = iMA(15,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0);

이중 SMA = iMA(15,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);

이중 EMA1 = iMA(60,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0);

이중 SMA1 = iMA(60,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);

//----주문----------------------- ------ ------------------+

if (HiTime>LoTime){

int ticket1 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,HiPrice,0,0,Pivot,NULL,Magic,58000,Red);

int ticket2 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,HiPrice,0,0,LoPrice,NULL,Magic,58000,Red);

int ticket3 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo138,0,0,HiPrice,NULL,Magic,58000,Red);

int ticket4 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo138,0,0,LoPrice,NULL,Magic,58000,Red);

int ticket5 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo162,0,0,HiPrice,NULL,Magic,58000,Red);

int ticket6 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo162,0,0,Pivot,NULL,Magic,58000,Red);

}

if (하이타임<LoTime){

int ticket7=OrderSend(Symbol(),OP_BUYLIMIT,Lot,LoPrice,0,0,Pivot,NULL,Magic,58000,Red);

int ticket8=OrderSend(Symbol(),OP_BUYLIMIT,Lot,LoPrice,0,0,HiPrice,NULL,Magic,58000,Red);

int ticket9=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_138,0,0,LoPrice,NULL,Magic,58000,Red);

int ticket10=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_138,0,0,Pivot,NULL,Magic,58000,Red);

int ticket11=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_162,0,0,LoPrice,NULL,Magic,58000,Red);

int ticket12=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_162,0,0,Pivot,NULL,Magic,58000,Red);

}

if (HiTime>LoTime && ClPrice>Pivot) {

int ticket13=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Pivot,0,0,HiPrice,NULL,Magic,58000,Red);

int ticket14=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Pivot,0,0,Fibo138,NULL,Magic,58000,Red);

}

if (HiTime<LoTime && ClPrice<피벗)

int ticket15=OrderSend(Symbol(),OP_SELLLIMIT,Lot,Pivot,0,0,LoPrice,NULL,Magic,58000,Red);

int ticket16=OrderSend(Symbol(),OP_SELLLIMIT,Lot,Pivot,0,0,Fibo_138,NULL,Magic,58000,Red);

}

리턴(0);


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


 

언뜻보기에 나는 매개 변수를 꺼 냈습니다.

int currDay;


시작을 위해

 
나는 정류장을 잊어 버렸고 30 pp를 넣어
 
오류를 지적하고 코드가 작동하기를 원합니다.
 

포럼의 여러분, 내가 그것을 알아낼 수 있도록 도와주세요 ....

다음은 코드의 일부입니다(일반 Expert Advisor 구축에 대한 자습서의 주요 사위 코드).

// 주문 회계 기능
// 전역 변수:
// Mas_Ord_New[31][9] // 마지막으로 알려진 주문의 배열
// Mas_Ord_Old[31][9] // 이전(이전) 주문 배열
// 첫 번째 인덱스 = 주문 일련 번호
// [][0]이 정의되지 않음
// [][1] 오픈율 주문(절대 환율)
// [][2] 주문의 StopLos(요율의 절대값)
// [][3] TakeProfit 주문(요율의 절대값)
// [][4] 주문 번호
// [][5] 숫자. 많은 주문. (절대 환율)
// [][6] 주문 유형. 0=B,1=S,2=BL,3=SL,4=BS,5=SS
// [][7] 주문 매직 넘버
// [][8] 0/1 주석이 있다는 사실

if (Mas_Ord_Old[old][6]==0 && Bid>Mas_Ord_Old[old][2] && Bid<Mas_Ord_Old[old][3])
Inform(1, Mas_Ord_Old[old][4]); // 따라서 매수 주문은 카운터 신호에 의해 마감됩니다.
else if (Mas_Ord_Old[old][6]==0 && Bid<=Mas_Ord_Old[old][2])
Inform(19,Mas_Ord_Old[old][4],Mas_Ord_Old[old][2]); // SL이 작동했음을 의미합니다.
else if (Mas_Ord_Old[old][6]==0 && Bid>=Mas_Ord_Old[old][3])
Inform(20,Mas_Ord_Old[old][4],Mas_Ord_Old[old][3]); // TP 작동

else if (Mas_Ord_Old[old][6]==1 && Ask<Mas_Ord_Old[old][2] && Ask>Mas_Ord_Old[old][3])
Inform(2, Mas_Ord_Old[old][4]); // 따라서 매도 주문은 반대 신호에 의해 마감됩니다.
else if (Mas_Ord_Old[old][6]==1 && Ask>=Mas_Ord_Old[old][2])
Inform(19,Mas_Ord_Old[old][4],Mas_Ord_Old[old][2]); // SL이 작동했음을 의미합니다.
else if (Mas_Ord_Old[old][6]==1 && Ask<=Mas_Ord_Old[old][3])
Inform(20,Mas_Ord_Old[old][4],Mas_Ord_Old[old][3]); // TP 작동

나머지는 관심없음...

문제: 90%의 경우에 올바른 매개변수가 표시됩니까? 즉. SL이 작동하면 매개 변수 "19"가 출구에 있고 TP - "20"인 경우 주문이 수동으로 또는 반대 신호로 마감되면 "1" 또는 "2"입니다. 그렇게 의도한건데...

그리고 때때로(아주 자주) "20" 대신 "19"(또는 그 반대) 또는 "1"("2")을 제공합니다. "if" 기능을 올바르게 설명하는 데 도움을 주세요: 주문 마감 사유를 유발하는 조건입니다.

아마도 이유는 가격의 반올림이라고 생각합니다.