헐, 내가 원래 찾고 있던 곳이 아닌 실수를 발견했습니다. 다음 작업을 혼자서 처리할 수 없습니다.
편차 범위를 설정하는 방법을 알려주십시오 - MA에서 가격 제거.
externstring s10 = ">>>>>>>>>>>>>>>>>>>>>>>>>>>>" ;
externstring s11 = ">>> Вход против МА" ;
externint iMA_Period = 365 ;
externint iMA_OpenDistance = 60 ; // как задать диапазон? например 60-85 за его пределами не открывать ордеров
다음은 입력 부분입니다
int GetSignal()
{
int Signal = 0 ;
double iMA_Signal = iMA ( Symbol (), 0 , iMA_Period, 0 , MODE_SMMA , PRICE_CLOSE , 0 );
int Ma_Bid_Diff = MathAbs (iMA_Signal - Bid )/vPoint;
if (Ma_Bid_Diff > iMA_OpenDistance && Bid > iMA_Signal) Signal = - 1 ;
if (Ma_Bid_Diff > iMA_OpenDistance && Bid < iMA_Signal) Signal = 1 ;
return (Signal);
}
extern int SL = 50, // 손절매 값(포인트) TP=150; // 이익 가치(포인트)를 취합니다. extern 이중 랏 = 0.1; // 작업 로트(마이크로 로트 - 0.01, 미니 로트 - 0.1, 일반 로트 - 1.0) extern string Order_Comment = "로봇"; // 주문과 함께 제공되는 주석 extern int 미끄러짐 = 5; // 최대 허용 미끄러짐 수준(포인트) 외부 정수 Magic_Number = 777; // 매직 넘버 - 로봇에 대한 주문("자신의" 거래를 구별하기 위해) extern bool Play_Sound = 거짓; // 열 때 소리 재생: true - 허용, false - 비활성화
//------------------------------------------------ -------------------------------------------------- ------------------+ //+ SimpleBars 표시기의 시간 프레임 및 매개변수 설정 | 외부 정수 기간 = 6; extern bool useClose = true; 외부 정수 너비 = 3; //+ SimpleBars 표시기의 시간 프레임 및 매개변수 설정 | //------------------------------------------------ -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------------------+ //+ 후행 정지 | extern bool UseTrailing = true; // 후행 정지 활성화/비활성화 extern int TrailingStop = 50; // 고정된 후행 정지 크기(포인트) extern int TrailingStep = 1; // 후행 정지 단계(포인트 단위) //+ 후행 정지 | //+----------------------------------------------- -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------------------+ //| 기능. 프로그램이 초기화될 때 실행되는 | 무효 초기화() { if(GlobalVariableCheck("this_bar"+Symbol()+마침표())) GlobalVariableDel("this_bar"+Symbol()+마침표()); 반품; } //| 기능. 프로그램이 초기화될 때 실행되는 | //+----------------------------------------------- -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------------------+ //| 기능. 프로그램 초기화 중 실행되는 | 무효 deinit() { if(GlobalVariableCheck("this_bar"+Symbol()+마침표())) GlobalVariableDel("this_bar"+Symbol()+마침표()); 반품; } //| 기능. 프로그램 초기화 중 실행되는 | //+----------------------------------------------- -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------------------+ //| 거래 신호 검색 기능 | 정수 fsignals() { 이중 신호 = iCustom(NULL, 0, "SimpleBars", 마침표, 0, 1, 4, 0); 리턴(0); // 구매를 시작하라는 신호 반환(1); // 판매 개시 신호 리턴(-1); // 신호 없음 } // 종료 int fsignals() //| 거래 신호 검색 기능 | //+----------------------------------------------- -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------------------+ //| 로봇이 이 막대에서 작업했다는 사실을 추적하는 기능 | 부울 this_bar() { 만약( (!GlobalVariableCheck("this_bar"+Symbol()+마침표())) || (GlobalVariableGet("this_bar"+Symbol()+Period())!=시간[0]) ) { GlobalVariableSet("this_bar"+Symbol()+Period(),Time[0]); 반환(거짓); } 또 다른 { 반환(참); } //end if (.. (!GlobalVariableCheck("this_bar"+Symbol()+Period())) } // 부울 종료 this_bar() //| 로봇이 이 막대에서 작업했다는 사실을 추적하는 기능 | //+----------------------------------------------- -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------------------+ //| 이 유형의 주문에 대한 검색 기능 | bool find_orders(int magic=-1, int type=-1, string symb="NULL") { /* 주어진 심볼에 대해 주어진 매직 넘버를 가진 이 유형의 적어도 하나의 주문이 발견되면 true를 반환합니다. */ for (int i=OrdersTotal()-1; i>=0; i--) { if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 중단; if(((OrderType()==유형) || (유형==-1)) && ((OrderMagicNumber()==매직) || (매직==-1)) && ((OrderSymbol()==Symbol() || (symb=="없음")))) { // 주문이 발견되면 true를 반환하고 루프를 종료합니다. 반환(참); 부서지다; } //end if((OrderType()==유형) && (OrderMagicNumber()==magic) && (OrderSymbol()==Symbol())) } //(int i2=OrdersTotal()-1; i2>=0; i2--) 종료
반환(거짓); // 거짓을 반환 } // end bool find_orders(int magic, int type) //| 이 유형의 주문에 대한 검색 기능 | //+----------------------------------------------- -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------------------+ //| 주문에 대한 손절매 값을 계산하는 기능 | 이중 sl(int sl_value, 정수 유형, 이중 가격=0.0, 문자열 symb="NONE", int rmode=1) { //유형=0 -> 시장 구매 //유형=1 -> 시장 판매 if(symb=="없음") symb=기호(); if(유형==0) 가격=NormalizeDouble(MarketInfo(symb,MODE_ASK),MarketInfo(symb,MODE_DIGITS)); if(유형==1) 가격=NormalizeDouble(MarketInfo(symb,MODE_BID),MarketInfo(symb,MODE_DIGITS)); if(sl_value<=0) return(0); if(rmode==1) { if((유형==0) || (유형==2) || (유형==4)) return(MarketInfo(symb,MODE_ASK)-sl_value*MarketInfo(symb,MODE_POINT)); //구매를 위해 if((유형==1) || (유형==3) || (유형==5)) return(MarketInfo(symb,MODE_BID)+sl_value*MarketInfo(symb,MODE_POINT)); //판매용 } if(rmode==2) { if((유형==0) || (유형==2) || (유형==4)) return(MarketInfo(symb,MODE_BID)-sl_value*MarketInfo(symb,MODE_POINT)); //구매를 위해 if((유형==1) || (유형==3) || (유형==5)) return(MarketInfo(symb,MODE_ASK)+sl_value*MarketInfo(symb,MODE_POINT)); //판매용 } } // end double sl(int sl_value, int type, double price=0.0, string symb="NONE", int rmode=1) //| 주문에 대한 손절매 값을 계산하는 기능 | //+----------------------------------------------- -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------------------+ //| 주문에 대한 이익실현 계산 기능 | 이중 tp(int tp_value, int 유형, 이중 가격=0.0, 문자열 symb="NONE") { //유형=0 -> 시장 구매 //유형=1 -> 시장 판매 if(symb=="없음") symb=기호(); if(유형==0) 가격=NormalizeDouble(MarketInfo(symb,MODE_ASK),MarketInfo(symb,MODE_DIGITS)); if(유형==1) 가격=NormalizeDouble(MarketInfo(symb,MODE_BID),MarketInfo(symb,MODE_DIGITS)); if(tp_value<=0) return(0); if((유형==0) || (유형==2) || (유형==4)) return(price+tp_value*MarketInfo(symb,MODE_POINT)); //구매를 위해 if((유형==1) || (유형==3) || (유형==5)) return(MarketInfo(symb,MODE_BID)-tp_value*MarketInfo(symb,MODE_POINT)); //판매용 } // end double tp(int tp_value, int type, double price=0.0, string symb="NONE") //| 주문에 대한 이익실현 계산 기능 | //+----------------------------------------------- -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------------------+ //| 주문을 여는 기능 | 무효 open_positions(int 신호, 이중 로트, 이중 가격=0.0, 문자열 symb="NONE") { //signal=0 -> 매수 신호 //signal=1 -> 매도 시작 신호 /* extern */ int Count_Of_Trade_Try=5, Pause_Of_Trade_Try=5;
정수 i = 0; //루프 카운터 변수 실수 = 0;
if(symb=="없음") symb=기호(); if(신호==0) 가격=NormalizeDouble(MarketInfo(symb,MODE_ASK),MarketInfo(symb,MODE_DIGITS)); //구매 시 공개 가격 if(신호==1) 가격=NormalizeDouble(MarketInfo(symb,MODE_BID),MarketInfo(symb,MODE_DIGITS)); //시가 판매
동안(i<=Count_Of_Trade_Try) { //주문 자체를 여는 기능(내장). 인식의 편의를 위해 매개변수는 다음과 같이 여러 줄로 구분됩니다. int 티켓 = OrderSend(Symbol(), //기호 신호, //주문 유형 많은, //볼륨 가격, //오픈 가격 Slipage, //허용되는 인용 수준 sl(SL,signal), //손절매 값 tp(TP,signal), //Profit 값 가져오기 Order_Comment, //주문 주석 Magic_Number, //매직 넘버 0, //만료일(보류 주문에 사용) CLR_NONE); //차트에 표시된 화살표의 색상(CLR_NONE - 화살표가 그려지지 않음) if(ticket!=-1) //개통에 성공하면 그래픽 객체를 그리고 루프를 종료합니다. 부서지다; err=GetLastError(); if(err!=0) Print("오류: "+Market_Err_To_Str(err)); 나는 ++; 수면(Pause_Of_Trade_Try*1000); // 오류가 발생하면 다시 시도하기 전에 일시 중지 } //종료 동안(i<=count) } // end void open_positions(int signal, double lot, double price=0.0, string symb="NONE") //| 주문을 여는 기능 | //+----------------------------------------------- -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------+ //| 오류 코드 해독 기능 | 문자열 Market_Err_To_Str(int err) { /* 함수는 거래 오류 코드만 포함합니다 */ 스위치(오류) { case(0): return("오류 없음"); case(1): return("오류는 없지만 결과는 알 수 없음"); case(2): return("일반 오류"); case(3): return("잘못된 매개변수"); case(4): return("거래 서버가 사용 중입니다."); case(5): return("클라이언트 터미널의 이전 버전"); case(6): return("거래 서버에 연결되지 않았습니다."); case(7): return("권한이 부족합니다"); case(8): return("요청이 너무 많습니다."); case(9): return("서버를 방해하는 잘못된 작업"); case(64): return("계정이 차단되었습니다."); case(65): return("잘못된 계좌번호"); case(128): return("거래 시간 초과 만료"); case(129): return("잘못된 가격"); case(130): return("잘못된 정지"); case(131): return("잘못된 볼륨"); case(132): return("시장 마감"); case(133): return("거래 금지"); case(134): return("거래를 완료하기 위한 금액이 충분하지 않습니다."); case(135): return("가격이 변경되었습니다."); case(136): return("가격 없음"); case(137): return("브로커 사용 중"); case(138): return("새 가격"); case(139): return("주문이 차단되어 이미 처리 중입니다."); case(140): return("구매만 가능합니다."); case(141): return("요청이 너무 많습니다."); case(145): return("주문이 시장과 너무 가까워서 수정을 금지합니다."); case(146): return("거래 하위 시스템이 사용 중입니다."); case(147): return("중개인은 만료일 사용을 금지합니다."); case(148): return("중개인이 설정한 한도에 도달한 미결 주문 및 보류 주문 수"); case(149): return("헤징이 금지된 경우 기존 포지션과 반대 포지션 오픈을 시도합니다."); case(150): return("FIFO 규칙에 위배되는 심볼의 포지션을 청산하려고 시도합니다.");
기본값: return(""); } //종료 스위치(오류) } //종료 문자열 Err_To_Str(int err) //| 오류 코드 해독 기능 | //+----------------------------------------------- -------------------------------------------------- ------+
//+----------------------------------------------- -------------------------------------------------- ------+ //| 거래 마감 | //+----------------------------------------------- -------------------------------------------------- ---+ //| 번호(티켓)로 주문을 마감하는 기능 |
bool close_by_ticket(int c_ticket, int 미끄러짐) { /* 번호(티켓)로 거래를 마감하는 기능. 시장가 주문을 체결할 때 최대 허용 슬리피지(slipage) 수준이 고려됩니다. */ /* extern */ int Count_Of_Trade_Try=5, Pause_Of_Trade_Try=5;
정수 i = 0; //루프 카운터 변수 실수 = 0; bool 티켓 = 거짓; // 거래를 성사시킨 (미)성공적인 사실을 나타내는 변수 이중 가격 = 0.0; //종료된 거래의 가격(시장 주문의 경우) if(OrderSelect(c_ticket,SELECT_BY_TICKET,MODE_TRADES)) { //티켓으로 주문 선택 if(OrderType()==OP_BUY) 가격 = NormalizeDouble(Bid,Digits); //구매 가격 if(OrderType()==OP_SELL) 가격 = NormalizeDouble(Ask,Digits); //판매가격 for(i=0;i<=Count_Of_Trade_Try;i++) { if(OrderType()<=1) //시장가 주문이면 닫고 보류 중이면 삭제 티켓=OrderClose(OrderTicket(),OrderLots(),가격,슬리피지,CLR_NONE); 또 다른 티켓=OrderDelete(OrderTicket());
if(ticket) { //닫거나 삭제에 성공하면 true를 반환하고 루프를 종료합니다. 반환(참); 부서지다; } // 종료 if(티켓) err=GetLastError(); if(err!=0) Print("오류: "+Market_Err_To_Str(err)); 수면(Pause_Of_Trade_Try*1000); // 오류가 발생하면 다시 시도하기 전에 일시 중지 } //(i=0;i<=Count_Of_Trade_Try;i++) 종료 } // 종료 if(OrderSelect(c_ticket,SELECT_BY_TICKET,MODE_TRADES))
반환(거짓); // 거짓을 반환 } // bool 종료 close_by_ticket(int c_ticket) //| 번호(티켓)로 주문을 마감하는 기능 | //+----------------------------------------------- -------------------------------------------------- ---+
bool cbm(int magic, int slipage, int type) { /* 마법으로 닫기(주어진 MagicNumber로 주어진 유형의 모든 주문 닫기) 최대 허용 미끄러짐이 고려됩니다. close_by_ticket 함수를 사용합니다. */ 정수 n = 0; 동안 (find_orders(마법, 유형)) (int i2=OrdersTotal()-1; i2>=0; i2--) { if (!OrderSelect(i2,SELECT_BY_POS,MODE_TRADES)) 중단;
if ((OrderType()==유형) && (OrderMagicNumber()==magic)) { close_by_ticket(OrderTicket(), 미끄러짐); 엔++; } //end if (((OrderType()==OP_BUY) || (OrderType()==OP_SELL)) && (OrderMagicNumber()==magic)) } //(int i2=OrdersTotal()-1; i2>=0; i2--) 종료
경우(n>0) 반환(참);
반환(거짓); } //end bool cbm(int magic, int slipage, int type) //| 거래 마감 | //+----------------------------------------------- -------------------------------------------------- ------+
안녕하세요 감정인입니다. 도움말 - 작동하지 않습니다. 변수 초기화로 인해 혼란스러워진 것 같습니다. 머리가 핑핑 돌지만, 나는 어떤 실수도 찾을 수 없습니다.
위치를 여는 대신 EA는 Klose(0) 가격에 화살표를 그려야 하고 닫는 대신 십자 표시를 하고 데이터( fExpiration_func(Expiration), fop_time, cl_time, fop_price, cl_price, ftype) 를 새 줄에 인쇄해야 합니다.
고맙습니다! 알고 보니 나는 어린아이처럼 기뻤지만 고문은 "새 것.
헐, 내가 원래 찾고 있던 곳이 아닌 실수를 발견했습니다. 다음 작업을 혼자서 처리할 수 없습니다.
편차 범위를 설정하는 방법을 알려주십시오 - MA에서 가격 제거.
다음은 입력 부분입니다
헐, 내가 원래 찾고 있던 곳이 아닌 실수를 발견했습니다. 다음 작업을 혼자서 처리할 수 없습니다.
편차 범위를 설정하는 방법을 알려주십시오 - MA에서 가격 제거.
다음은 입력 부분입니다
그리고 그에 따라 조건
어드바이저의 초기 데이터를 (1 Buy, -1 Sell)로 올바르게 변경해야 합니다.
//+----------------------------------------------- --------------------+
//| SimpleBars_rob.mq4 |//| Copyright © 2010, ENSED 팀 |
//| http://www.ensed.org |
//+----------------------------------------------- --------------------+
#property copyright "Copyright © 2010, ENSED Team"
#속성 링크 "http://www.ensed.org"
extern int SL = 50, // 손절매 값(포인트)
TP=150; // 이익 가치(포인트)를 취합니다.
extern 이중 랏 = 0.1; // 작업 로트(마이크로 로트 - 0.01, 미니 로트 - 0.1, 일반 로트 - 1.0)
extern string Order_Comment = "로봇"; // 주문과 함께 제공되는 주석
extern int 미끄러짐 = 5; // 최대 허용 미끄러짐 수준(포인트)
외부 정수 Magic_Number = 777; // 매직 넘버 - 로봇에 대한 주문("자신의" 거래를 구별하기 위해)
extern bool Play_Sound = 거짓; // 열 때 소리 재생: true - 허용, false - 비활성화
//------------------------------------------------ -------------------------------------------------- ------------------+
//+ SimpleBars 표시기의 시간 프레임 및 매개변수 설정 |
외부 정수 기간 = 6;
extern bool useClose = true;
외부 정수 너비 = 3;
//+ SimpleBars 표시기의 시간 프레임 및 매개변수 설정 |
//------------------------------------------------ -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------------------+
//+ 후행 정지 |
extern bool UseTrailing = true; // 후행 정지 활성화/비활성화
extern int TrailingStop = 50; // 고정된 후행 정지 크기(포인트)
extern int TrailingStep = 1; // 후행 정지 단계(포인트 단위)
//+ 후행 정지 |
//+----------------------------------------------- -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------------------+
//| 기능. 프로그램이 초기화될 때 실행되는 |
무효 초기화() {
if(GlobalVariableCheck("this_bar"+Symbol()+마침표()))
GlobalVariableDel("this_bar"+Symbol()+마침표());
반품;
}
//| 기능. 프로그램이 초기화될 때 실행되는 |
//+----------------------------------------------- -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------------------+
//| 기능. 프로그램 초기화 중 실행되는 |
무효 deinit() {
if(GlobalVariableCheck("this_bar"+Symbol()+마침표()))
GlobalVariableDel("this_bar"+Symbol()+마침표());
반품;
}
//| 기능. 프로그램 초기화 중 실행되는 |
//+----------------------------------------------- -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------------------+
//| 거래 신호 검색 기능 |
정수 fsignals() {
이중 신호 = iCustom(NULL, 0, "SimpleBars", 마침표, 0, 1, 4, 0);
리턴(0); // 구매를 시작하라는 신호
반환(1); // 판매 개시 신호
리턴(-1); // 신호 없음
} // 종료 int fsignals()
//| 거래 신호 검색 기능 |
//+----------------------------------------------- -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------------------+
//| 로봇이 이 막대에서 작업했다는 사실을 추적하는 기능 |
부울 this_bar() {
만약(
(!GlobalVariableCheck("this_bar"+Symbol()+마침표()))
|| (GlobalVariableGet("this_bar"+Symbol()+Period())!=시간[0])
) {
GlobalVariableSet("this_bar"+Symbol()+Period(),Time[0]);
반환(거짓);
} 또 다른 {
반환(참);
} //end if (.. (!GlobalVariableCheck("this_bar"+Symbol()+Period()))
} // 부울 종료 this_bar()
//| 로봇이 이 막대에서 작업했다는 사실을 추적하는 기능 |
//+----------------------------------------------- -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------------------+
//| 이 유형의 주문에 대한 검색 기능 |
bool find_orders(int magic=-1, int type=-1, string symb="NULL") {
/* 주어진 심볼에 대해 주어진 매직 넘버를 가진 이 유형의 적어도 하나의 주문이 발견되면 true를 반환합니다. */
for (int i=OrdersTotal()-1; i>=0; i--) {
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) 중단;
if(((OrderType()==유형) || (유형==-1))
&& ((OrderMagicNumber()==매직) || (매직==-1))
&& ((OrderSymbol()==Symbol() || (symb=="없음")))) {
// 주문이 발견되면 true를 반환하고 루프를 종료합니다.
반환(참);
부서지다;
} //end if((OrderType()==유형) && (OrderMagicNumber()==magic) && (OrderSymbol()==Symbol()))
} //(int i2=OrdersTotal()-1; i2>=0; i2--) 종료
반환(거짓); // 거짓을 반환
} // end bool find_orders(int magic, int type)
//| 이 유형의 주문에 대한 검색 기능 |
//+----------------------------------------------- -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------------------+
//| 주문에 대한 손절매 값을 계산하는 기능 |
이중 sl(int sl_value, 정수 유형, 이중 가격=0.0, 문자열 symb="NONE", int rmode=1) {
//유형=0 -> 시장 구매
//유형=1 -> 시장 판매
if(symb=="없음") symb=기호();
if(유형==0) 가격=NormalizeDouble(MarketInfo(symb,MODE_ASK),MarketInfo(symb,MODE_DIGITS));
if(유형==1) 가격=NormalizeDouble(MarketInfo(symb,MODE_BID),MarketInfo(symb,MODE_DIGITS));
if(sl_value<=0) return(0);
if(rmode==1) {
if((유형==0) || (유형==2) || (유형==4)) return(MarketInfo(symb,MODE_ASK)-sl_value*MarketInfo(symb,MODE_POINT)); //구매를 위해
if((유형==1) || (유형==3) || (유형==5)) return(MarketInfo(symb,MODE_BID)+sl_value*MarketInfo(symb,MODE_POINT)); //판매용
}
if(rmode==2) {
if((유형==0) || (유형==2) || (유형==4)) return(MarketInfo(symb,MODE_BID)-sl_value*MarketInfo(symb,MODE_POINT)); //구매를 위해
if((유형==1) || (유형==3) || (유형==5)) return(MarketInfo(symb,MODE_ASK)+sl_value*MarketInfo(symb,MODE_POINT)); //판매용
}
} // end double sl(int sl_value, int type, double price=0.0, string symb="NONE", int rmode=1)
//| 주문에 대한 손절매 값을 계산하는 기능 |
//+----------------------------------------------- -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------------------+
//| 주문에 대한 이익실현 계산 기능 |
이중 tp(int tp_value, int 유형, 이중 가격=0.0, 문자열 symb="NONE") {
//유형=0 -> 시장 구매
//유형=1 -> 시장 판매
if(symb=="없음") symb=기호();
if(유형==0) 가격=NormalizeDouble(MarketInfo(symb,MODE_ASK),MarketInfo(symb,MODE_DIGITS));
if(유형==1) 가격=NormalizeDouble(MarketInfo(symb,MODE_BID),MarketInfo(symb,MODE_DIGITS));
if(tp_value<=0) return(0);
if((유형==0) || (유형==2) || (유형==4)) return(price+tp_value*MarketInfo(symb,MODE_POINT)); //구매를 위해
if((유형==1) || (유형==3) || (유형==5)) return(MarketInfo(symb,MODE_BID)-tp_value*MarketInfo(symb,MODE_POINT)); //판매용
} // end double tp(int tp_value, int type, double price=0.0, string symb="NONE")
//| 주문에 대한 이익실현 계산 기능 |
//+----------------------------------------------- -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------------------+
//| 주문을 여는 기능 |
무효 open_positions(int 신호, 이중 로트, 이중 가격=0.0, 문자열 symb="NONE") {
//signal=0 -> 매수 신호
//signal=1 -> 매도 시작 신호
/* extern */ int Count_Of_Trade_Try=5, Pause_Of_Trade_Try=5;
정수 i = 0; //루프 카운터 변수
실수 = 0;
if(symb=="없음") symb=기호();
if(신호==0)
가격=NormalizeDouble(MarketInfo(symb,MODE_ASK),MarketInfo(symb,MODE_DIGITS)); //구매 시 공개 가격
if(신호==1)
가격=NormalizeDouble(MarketInfo(symb,MODE_BID),MarketInfo(symb,MODE_DIGITS)); //시가 판매
동안(i<=Count_Of_Trade_Try) {
//주문 자체를 여는 기능(내장). 인식의 편의를 위해 매개변수는 다음과 같이 여러 줄로 구분됩니다.
int 티켓 = OrderSend(Symbol(), //기호
신호, //주문 유형
많은, //볼륨
가격, //오픈 가격
Slipage, //허용되는 인용 수준
sl(SL,signal), //손절매 값
tp(TP,signal), //Profit 값 가져오기
Order_Comment, //주문 주석
Magic_Number, //매직 넘버
0, //만료일(보류 주문에 사용)
CLR_NONE); //차트에 표시된 화살표의 색상(CLR_NONE - 화살표가 그려지지 않음)
if(ticket!=-1) //개통에 성공하면 그래픽 객체를 그리고 루프를 종료합니다.
부서지다;
err=GetLastError();
if(err!=0) Print("오류: "+Market_Err_To_Str(err));
나는 ++;
수면(Pause_Of_Trade_Try*1000); // 오류가 발생하면 다시 시도하기 전에 일시 중지
} //종료 동안(i<=count)
} // end void open_positions(int signal, double lot, double price=0.0, string symb="NONE")
//| 주문을 여는 기능 |
//+----------------------------------------------- -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------+
//| 오류 코드 해독 기능 |
문자열 Market_Err_To_Str(int err) {
/* 함수는 거래 오류 코드만 포함합니다 */
스위치(오류) {
case(0): return("오류 없음");
case(1): return("오류는 없지만 결과는 알 수 없음");
case(2): return("일반 오류");
case(3): return("잘못된 매개변수");
case(4): return("거래 서버가 사용 중입니다.");
case(5): return("클라이언트 터미널의 이전 버전");
case(6): return("거래 서버에 연결되지 않았습니다.");
case(7): return("권한이 부족합니다");
case(8): return("요청이 너무 많습니다.");
case(9): return("서버를 방해하는 잘못된 작업");
case(64): return("계정이 차단되었습니다.");
case(65): return("잘못된 계좌번호");
case(128): return("거래 시간 초과 만료");
case(129): return("잘못된 가격");
case(130): return("잘못된 정지");
case(131): return("잘못된 볼륨");
case(132): return("시장 마감");
case(133): return("거래 금지");
case(134): return("거래를 완료하기 위한 금액이 충분하지 않습니다.");
case(135): return("가격이 변경되었습니다.");
case(136): return("가격 없음");
case(137): return("브로커 사용 중");
case(138): return("새 가격");
case(139): return("주문이 차단되어 이미 처리 중입니다.");
case(140): return("구매만 가능합니다.");
case(141): return("요청이 너무 많습니다.");
case(145): return("주문이 시장과 너무 가까워서 수정을 금지합니다.");
case(146): return("거래 하위 시스템이 사용 중입니다.");
case(147): return("중개인은 만료일 사용을 금지합니다.");
case(148): return("중개인이 설정한 한도에 도달한 미결 주문 및 보류 주문 수");
case(149): return("헤징이 금지된 경우 기존 포지션과 반대 포지션 오픈을 시도합니다.");
case(150): return("FIFO 규칙에 위배되는 심볼의 포지션을 청산하려고 시도합니다.");
기본값: return("");
} //종료 스위치(오류)
} //종료 문자열 Err_To_Str(int err)
//| 오류 코드 해독 기능 |
//+----------------------------------------------- -------------------------------------------------- ------+
//+----------------------------------------------- -------------------------------------------------- ------+
//| 거래 마감 |
//+----------------------------------------------- -------------------------------------------------- ---+
//| 번호(티켓)로 주문을 마감하는 기능 |
bool close_by_ticket(int c_ticket, int 미끄러짐) {
/*
번호(티켓)로 거래를 마감하는 기능.
시장가 주문을 체결할 때 최대 허용 슬리피지(slipage) 수준이 고려됩니다.
*/
/* extern */ int Count_Of_Trade_Try=5, Pause_Of_Trade_Try=5;
정수 i = 0; //루프 카운터 변수
실수 = 0;
bool 티켓 = 거짓; // 거래를 성사시킨 (미)성공적인 사실을 나타내는 변수
이중 가격 = 0.0; //종료된 거래의 가격(시장 주문의 경우)
if(OrderSelect(c_ticket,SELECT_BY_TICKET,MODE_TRADES)) { //티켓으로 주문 선택
if(OrderType()==OP_BUY) 가격 = NormalizeDouble(Bid,Digits); //구매 가격
if(OrderType()==OP_SELL) 가격 = NormalizeDouble(Ask,Digits); //판매가격
for(i=0;i<=Count_Of_Trade_Try;i++) {
if(OrderType()<=1) //시장가 주문이면 닫고 보류 중이면 삭제
티켓=OrderClose(OrderTicket(),OrderLots(),가격,슬리피지,CLR_NONE);
또 다른
티켓=OrderDelete(OrderTicket());
if(ticket) { //닫거나 삭제에 성공하면 true를 반환하고 루프를 종료합니다.
반환(참);
부서지다;
} // 종료 if(티켓)
err=GetLastError();
if(err!=0) Print("오류: "+Market_Err_To_Str(err));
수면(Pause_Of_Trade_Try*1000); // 오류가 발생하면 다시 시도하기 전에 일시 중지
} //(i=0;i<=Count_Of_Trade_Try;i++) 종료
} // 종료 if(OrderSelect(c_ticket,SELECT_BY_TICKET,MODE_TRADES))
반환(거짓); // 거짓을 반환
} // bool 종료 close_by_ticket(int c_ticket)
//| 번호(티켓)로 주문을 마감하는 기능 |
//+----------------------------------------------- -------------------------------------------------- ---+
bool cbm(int magic, int slipage, int type) {
/*
마법으로 닫기(주어진 MagicNumber로 주어진 유형의 모든 주문 닫기)
최대 허용 미끄러짐이 고려됩니다.
close_by_ticket 함수를 사용합니다.
*/
정수 n = 0;
동안 (find_orders(마법, 유형))
(int i2=OrdersTotal()-1; i2>=0; i2--) {
if (!OrderSelect(i2,SELECT_BY_POS,MODE_TRADES)) 중단;
if ((OrderType()==유형) && (OrderMagicNumber()==magic)) {
close_by_ticket(OrderTicket(), 미끄러짐);
엔++;
} //end if (((OrderType()==OP_BUY) || (OrderType()==OP_SELL)) && (OrderMagicNumber()==magic))
} //(int i2=OrdersTotal()-1; i2>=0; i2--) 종료
경우(n>0)
반환(참);
반환(거짓);
} //end bool cbm(int magic, int slipage, int type)
//| 거래 마감 |
//+----------------------------------------------- -------------------------------------------------- ------+
//+----------------------------------------------- -------------------------------------------------- ------------------+
//| 후행 정지 손실 |
무효 T_SL() {
if(!UseTrailing) 반환;
정수 i = 0;
for(i=0; i<OrdersTotal(); i++) {
if(!(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))) 계속;
if(OrderSymbol() != Symbol() || OrderMagicNumber()!=Magic_Number) 계속;
if(주문유형()==OP_BUY) {
if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(TrailingStop*Point,Digits)) {
if(NormalizeDouble(OrderStopLoss(),Digits)<NormalizeDouble(Bid-(TrailingStop+TrailingStep-1)*Point,Digits))
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid-TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE);
} //end if(NormalizeDouble(Bid-OrderOpenPrice(),Digits)>NormalizeDouble(TrailingStop*Point,Digits))
} // 종료 if(OrderType()==OP_BUY)
if(주문유형()==OP_SELL) {
if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)>NormalizeDouble(TrailingStop*Point,Digits)) {
if(NormalizeDouble(OrderStopLoss(),Digits)>NormalizeDouble(Ask+(TrailingStop+TrailingStep-1)*Point,Digits))
OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask+TrailingStop*Point,Digits), OrderTakeProfit(), 0, CLR_NONE);
} //end if(NormalizeDouble(OrderOpenPrice()-Ask,Digits)>NormalizeDouble(TrailingStop*Point,Digits))
} //end if(OrderType()==OP_SELL)
} //종료 for(i=0; i<OrdersTotal(); i++)
} // 무효 T_SL() 종료
//| 후행 정지 손실 |
//+----------------------------------------------- -------------------------------------------------- ------------------+
//+----------------------------------------------- -------------------------------------------------- ------------------+
//| 주요 기능 |
무효 시작() {
정수 신호 = fsignals();
if(!find_orders(Magic_Number)) {
if((시그!=-1)) {
if(!this_bar()) {
open_positions(시그, 랏);
if(재생_사운드)
PlaySound("alert.wav");
}
} // 종료 if((sig!=-1) && (!this_bar()))
} 또 다른 {
if(시그널==0) {
if(cbm(Magic_Number, Slipage, 1)) {
open_positions(시그, 랏);
if(재생_사운드)
PlaySound("alert.wav");
} //end if(cbm(Magic_Number, Slipage, 1))
} // 종료 if(sig==0)
if(시그널==1) {
if(cbm(Magic_Number, Slipage, 0)) {
open_positions(시그, 랏);
if(재생_사운드)
PlaySound("alert.wav");
} //end if(cbm(Magic_Number, Slipage, 0))
} // 종료 if(sig==1)
TSL();
} // 종료 if(!find_orders(Magic_Number)) (else)
반품;
}
//| 주요 기능 |
//+----------------------------------------------- -------------------------------------------------- ------------------+
안녕하세요 감정인입니다. 도움말 - 작동하지 않습니다. 변수 초기화로 인해 혼란스러워진 것 같습니다. 머리가 핑핑 돌지만, 나는 어떤 실수도 찾을 수 없습니다.
위치를 여는 대신 EA는 Klose(0) 가격에 화살표를 그려야 하고 닫는 대신 십자 표시를 하고 데이터( fExpiration_func(Expiration), fop_time, cl_time, fop_price, cl_price, ftype) 를 새 줄에 인쇄해야 합니다.
여기서 스토캐스틱은 예시로만 사용됩니다.
그런 다음 문제는 두 값을 반환하는 방법입니다. 이렇게 시도했지만 오류
그런 다음 문제는 두 값을 반환하는 방법입니다. 이렇게 시도했지만 오류
그런 다음 문제는 두 값을 반환하는 방법입니다. 이렇게 시도했지만 오류
그리고 변수를 사용하려고 하지 않았습니다. 갑자기 도와줘
괜찮으시다면 도와주세요
고문에게 지표로 거래하도록 가르치십시오.
BS_리빙나우 ver #1.mq4 https://www.mql5.com/ru/code/11014#50910
UP= iCustom(Symbol(),NULL,"지금",BQuant,0,0);
DOW= iCustom(Symbol(),NULL,"지금",BQuant,1,0);
if(DOW){OrderSend(Symbol(), OP_SELL, Lot, Bid, Slip, 0, 0, "Forex-Robots.ru SELL", Magic, 0,Red);}
if(UP ){OrderSend(Symbol(), OP_BUY, Lot, Ask, Slip, 0, 0, "Forex-Robots.ru BUY", Magic, 0,Blue);}
논평
(
"\n 이익: ", UP,
"\n 이익: ", DOW
);
댓글을 통해 값을 구하려고 했지만 항상 고정되어 있습니다. 이 표시기에 데이터가 어떻게 표시되는지 알려주세요
그리고 변수를 사용하려고 하지 않았습니다. 갑자기 도와줘
감사합니다 작동합니다
괜찮으시다면 도와주세요
고문에게 지표로 거래하도록 가르치십시오.
BS_리빙나우 ver #1.mq4 https://www.mql5.com/ru/code/11014#50910