포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 1093 1...108610871088108910901091109210931094109510961097109810991100...1178 새 코멘트 Vitalie Postolache 2016.09.09 05:40 #10921 A13ksandr : 죄송합니다! 물론 void OnTick()의 모든 것이 발생합니다. 설명) 그런 다음 오류 코드가 테스터의 로그에 있으며 더 이해할 수 있습니다. A13ksandr 2016.09.09 06:07 #10922 evillive : 그런 다음 오류 코드가 테스터의 로그에 있으며 더 이해할 수 있습니다. 오류가 없습니다. 그것은 절차에 갈 때 그냥 멈 춥니 다. 그리고 StartSell도 있는데 일반적으로 들어갑니다. 일종의 진흙. 업데이트된 따옴표 - 작동하기 시작했습니다. 구멍 때문에 틀려도 적어도 얼지는 않는다. Aleksandr Afanasenko 2016.09.09 07:01 #10923 인사말! 바이너리 옵션에서 서로 다른 악기(봇은 동시에 다양한 악기의 여러 차트에 첨부됨)에 대한 시리즈 수의 설정 값 이상의 동시 개통을 금지하는 가장 좋은 방법을 알려주세요. extern 이중 로트 = 1; // 많은 외부 intExp = 1; // 만료 외부 int 대기 = 0; // 한 방향의 촛불 개수 extern int 시간 초과 = 1; // 시간 간격 extern 이중 승수 = 3; // 승수 extern int 미끄러짐 = 5; // 미끄러짐 외부 정수 MaxOpenOrders = 1; // 동시 오픈 주문의 최대 수 extern int 매직 = 774274; // 마법 int 티켓, 유형; 두 배 가격, 많은; //+----------------------------------------------- --------------------+ //| 전문가 초기화 기능 | //+----------------------------------------------- --------------------+ int OnInit() { 반환(INIT_SUCCESSED); } //+----------------------------------------------- --------------------+ //| 전문적인 초기화 해제 기능 | //+----------------------------------------------- --------------------+ 무효 OnDeinit(const int 이유) { } //+----------------------------------------------- --------------------+ //| 전문가 틱 기능 | //+----------------------------------------------- --------------------+ 무효 OnTick() { // --------------- 거래 시작 --------------- if (CountTrades() == 0) // 주문 수는 0과 같아야 합니다. { if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))) // 마지막 거래가 수익성이 없으면 같은 거래가 열리지만 로트가 증가합니다. { 유형 = TypeLastHistOrder(); if (유형 == OP_BUY) 가격 = 묻기; if (유형 == OP_SELL) 가격 = 입찰가; 로트 = NormalizeDouble(LotsLastHistOrder()*승수, 2); 티켓 = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic); } if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0) // 마지막 거래의 이익이 0이면 동일하게 엽니다. { 유형 = TypeLastHistOrder(); if (유형 == OP_BUY) 가격 = 묻기; if (유형 == OP_SELL) 가격 = 입찰가; 많은 = NormalizeDouble(LotsLastHistOrder(), 2); 티켓 = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic); } if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY)) || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))) || CountHistTrades() == 0)// 마지막 거래가 수익성이 있으면 주문이 열립니다. { if (SignalBuy() && MaxOpenOrders > OrdersTotal()) { 티켓 = OrderSend(Symbol(), OP_BUY, lot, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic); } if (SignalSell() && MaxOpenOrders > OrdersTotal()) { 티켓 = OrderSend(Symbol(), OP_SELL, 랏, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic); } } } } //+----------------------------------------------- --------------------+ int CountTrades(int 유형 = -1) { 정수 cnt = 0; (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1)) cnt++; } } 리턴(cnt); } //+----------------------------------------------- --------------------+ int CountHistTrades(int 유형 = -1) { 정수 cnt = 0; (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1)) cnt++; } } 리턴(cnt); } //+----------------------------------------------- --------------------+ bool SignalBuy() { for (int i=1; i<=대기; i++) { if (닫기[i] > 열기[i]) return(false); } if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= 대기 || (대기 == 0 && TimeCurrent() >= TimeLastHistOrder()+시간 초과)) && CountHistTrades() > 0) return(true); if (CountHistTrades() == 0) return(true); 반환(거짓); } //+----------------------------------------------- --------------------+ bool SignalSell() { for (int i=1; i<=대기; i++) { if (닫기[i] < 열기[i]) return(false); } if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= 대기 || (대기 == 0 && TimeCurrent() >= TimeLastHistOrder()+시간 초과)) && CountHistTrades() > 0) return(true); if (CountHistTrades() == 0) return(true); 반환(거짓); } //+----------------------------------------------- --------------------+ 날짜/시간 TimeLastHistOrder(int 유형 = -1) { 날짜 시간 마지막 시간 = 0; 날짜 시간 오픈 시간 = 0; (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1)) { if (OrderCloseTime() > 마지막 시간) { 마지막 시간 = OrderCloseTime(); 오픈타임 = 주문오픈타임(); } } } } 반환(오픈 시간); } //+----------------------------------------------- --------------------+ intTypeLastHistOrder() { 날짜 시간 = 0; 정수 유형 = -1; (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderCloseTime() > 시간) { 시간 = OrderCloseTime(); 유형 = 주문 유형(); } } } } 반환(유형); } //+----------------------------------------------- --------------------+ 이중 LotLastHistOrder(int 유형 = -1) { 날짜 시간 = 0; 이중 로트 = 0; (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1)) { if (OrderOpenTime() > 시간) { 시간 = OrderOpenTime(); 제비 = OrderLots(); } } } } 반환(많은); } //+----------------------------------------------- ------ --------------------+ 두 배 PriceCloseLastHistOrder(int 유형 = -1) { 날짜 시간 = 0; 이중 가격 = 0; (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1)) { if (OrderCloseTime() > 시간) { 시간 = OrderCloseTime(); 가격 = OrderClosePrice(); } } } } 반품(가격); } //+----------------------------------------------- --------------------+ 두 배 PriceOpenLastHistOrder(int 유형 = -1) { 날짜 시간 = 0; 이중 가격 = 0; (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1)) { if (OrderCloseTime() > 시간) { 시간 = OrderCloseTime(); 가격 = OrderOpenPrice(); } } } } 반품(가격); } //+----------------------------------------------- --------------------+ Any rookie question, so MQL4 및 MQL5에 대한 묻다! A13ksandr 2016.09.09 08:53 #10924 alvlaf : CountTrades 함수에서 OrderSymbol() == Symbol() 조건을 제거하고 OrderType() == OP_BUY || OrderType() == OP_SELL, 맞습니까? 그리고 OnTick에서 OrderSend 전에 조건을 변경합니다. if (SignalBuy() && CountTrades() < MaxOpenOrders )... 그리고 판매도 마찬가지입니다. Aleksandr Afanasenko 2016.09.09 12:12 #10925 A13ksandr : 고마워, 나는 그것을 시도했다 - 봇은 각 틱 에 많은 주문을 열기 시작했습니다. Aleksandr Afanasenko 2016.09.09 12:18 #10926 A13ksandr : if (OrderMagicNumber() == Magic && (OrderType() == OrderType() == OP_BUY || OrderType() == OP_SELL)) 내가 올바르게 변경 했습니까? [삭제] 2016.09.09 14:08 #10927 alvlaf : 인사말! 바이너리 옵션에서 서로 다른 악기(봇은 동시에 다양한 악기의 여러 차트에 첨부됨)에 대한 시리즈 수의 설정 값 이상의 동시 개통을 금지하는 가장 좋은 방법을 알려주세요. extern 이중 로트 = 1; // 많은 외부 intExp = 1; // 만료 외부 int 대기 = 0; // 한 방향의 촛불 개수 extern int 시간 초과 = 1; // 시간 간격 extern 이중 승수 = 3; // 승수 extern int 미끄러짐 = 5; // 미끄러짐 외부 정수 MaxOpenOrders = 1; // 동시 오픈 주문의 최대 수 extern int 매직 = 774274; // 마법 int 티켓, 유형; 두 배 가격, 많은; //+----------------------------------------------- --------------------+ //| 전문가 초기화 기능 | //+----------------------------------------------- --------------------+ int OnInit() { 반환(INIT_SUCCESSED); } //+----------------------------------------------- --------------------+ //| 전문적인 초기화 해제 기능 | //+----------------------------------------------- --------------------+ 무효 OnDeinit(const int 이유) { } //+----------------------------------------------- --------------------+ //| 전문가 틱 기능 | //+----------------------------------------------- --------------------+ 무효 OnTick() { // --------------- 거래 시작 --------------- if (CountTrades() == 0) // 주문 수는 0과 같아야 합니다. { if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY)) || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL))) // 마지막 거래가 수익성이 없으면 같은 거래가 열리지만 로트가 증가합니다. { 유형 = TypeLastHistOrder(); if (유형 == OP_BUY) 가격 = 묻기; if (유형 == OP_SELL) 가격 = 입찰가; 로트 = NormalizeDouble(LotsLastHistOrder()*승수, 2); 티켓 = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic); } if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0) // 마지막 거래의 이익이 0이면 동일하게 엽니다. { 유형 = TypeLastHistOrder(); if (유형 == OP_BUY) 가격 = 묻기; if (유형 == OP_SELL) 가격 = 입찰가; 많은 = NormalizeDouble(LotsLastHistOrder(), 2); 티켓 = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic); } if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY)) || (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL))) || CountHistTrades() == 0)// 마지막 거래가 수익성이 있으면 주문이 열립니다. { if (SignalBuy() && MaxOpenOrders > OrdersTotal()) { 티켓 = OrderSend(Symbol(), OP_BUY, lot, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic); } if (SignalSell() && MaxOpenOrders > OrdersTotal()) { 티켓 = OrderSend(Symbol(), OP_SELL, 랏, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic); } } } } //+----------------------------------------------- --------------------+ int CountTrades(int 유형 = -1) { 정수 cnt = 0; (int i=OrdersTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1)) cnt++; } } 리턴(cnt); } //+----------------------------------------------- --------------------+ int CountHistTrades(int 유형 = -1) { 정수 cnt = 0; (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1)) cnt++; } } 리턴(cnt); } //+----------------------------------------------- --------------------+ bool SignalBuy() { for (int i=1; i<=대기; i++) { if (닫기[i] > 열기[i]) return(false); } if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= 대기 || (대기 == 0 && TimeCurrent() >= TimeLastHistOrder()+시간 초과)) && CountHistTrades() > 0) return(true); if (CountHistTrades() == 0) return(true); 반환(거짓); } //+----------------------------------------------- --------------------+ bool SignalSell() { for (int i=1; i<=대기; i++) { if (닫기[i] < 열기[i]) return(false); } if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= 대기 || (대기 == 0 && TimeCurrent() >= TimeLastHistOrder()+시간 초과)) && CountHistTrades() > 0) return(true); if (CountHistTrades() == 0) return(true); 반환(거짓); } //+----------------------------------------------- --------------------+ 날짜/시간 TimeLastHistOrder(int 유형 = -1) { 날짜 시간 마지막 시간 = 0; 날짜 시간 오픈 시간 = 0; (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1)) { if (OrderCloseTime() > 마지막 시간) { 마지막 시간 = OrderCloseTime(); 오픈타임 = 주문오픈타임(); } } } } 반환(오픈 시간); } //+----------------------------------------------- --------------------+ intTypeLastHistOrder() { 날짜 시간 = 0; 정수 유형 = -1; (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) { if (OrderCloseTime() > 시간) { 시간 = OrderCloseTime(); 유형 = 주문 유형(); } } } } 반환(유형); } //+----------------------------------------------- --------------------+ 이중 LotLastHistOrder(int 유형 = -1) { 날짜 시간 = 0; 이중 로트 = 0; (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1)) { if (OrderOpenTime() > 시간) { 시간 = OrderOpenTime(); 제비 = OrderLots(); } } } } 반환(많은); } //+----------------------------------------------- --------------------+ 두 배 PriceCloseLastHistOrder(int 유형 = -1) { 날짜 시간 = 0; 이중 가격 = 0; (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1)) { if (OrderCloseTime() > 시간) { 시간 = OrderCloseTime(); 가격 = OrderClosePrice(); } } } } 반품(가격); } //+----------------------------------------------- --------------------+ 두 배 PriceOpenLastHistOrder(int 유형 = -1) { 날짜 시간 = 0; 이중 가격 = 0; (int i=OrdersHistoryTotal()-1; i>=0; i--) { if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1)) { if (OrderCloseTime() > 시간) { 시간 = OrderCloseTime(); 가격 = OrderOpenPrice(); } } } } 반품(가격); } //+----------------------------------------------- --------------------+ 어떤 목적으로 MagicNumber를 사용하는지 알려주십시오 . 이 전략에서 이것이 무엇을 제공합니까? IMHO , 여기에서 OnInit OnDeinit 기능을 버릴 수도 있습니다. RichLux 2016.09.09 17:12 #10928 evillive : 시간은 날짜/시간 형식으로 즉시 설정할 수 있으며 변환 시 시스템 시간을 낭비할 필요가 없습니다. 작동 방식은 다음과 같습니다. 외부 날짜 시간 시작 시간 = D'07:00' ; 이 시간 형식에서는 어드바이저를 시작할 때 어드바이저의 편집 날짜를 가져오지만 오늘을 원합니다. 어떻게 고치는 지? Vitalie Postolache 2016.09.09 18:57 #10929 RichLux : 이 시간 형식에서는 어드바이저를 시작할 때 어드바이저의 편집 날짜를 가져오지만 오늘을 원합니다. 어떻게 고치는 지? 시작 시 나머지 사용자 매개변수와 동일한 방식으로 매개변수를 원하는 매개변수로 변경합니다. 그리고 어떤 이유로 스크립트가 시작된 시점의 현재 날짜를 보여줍니다. A13ksandr 2016.09.10 11:23 #10930 LRA : 어떤 목적으로 MagicNumber를 사용하는지 알려주십시오 . 이 전략에서 이것이 무엇을 제공합니까? IMHO , 여기에서 OnInit OnDeinit 기능을 버릴 수도 있습니다. "이 전략에서"라는 단어의 목적은 무엇입니까? 계정에서 수동으로 거래가 이루어지거나 이러한 주문이 건드리지 않도록 다른 Expert Advisor가 실행 중인 경우 Magic이 필요합니다. 그렇게 생각해요. 1...108610871088108910901091109210931094109510961097109810991100...1178 새 코멘트 사유: 취소 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
그런 다음 오류 코드가 테스터의 로그에 있으며 더 이해할 수 있습니다.
오류가 없습니다. 그것은 절차에 갈 때 그냥 멈 춥니 다. 그리고 StartSell도 있는데 일반적으로 들어갑니다. 일종의 진흙.
업데이트된 따옴표 - 작동하기 시작했습니다. 구멍 때문에 틀려도 적어도 얼지는 않는다.
인사말! 바이너리 옵션에서 서로 다른 악기(봇은 동시에 다양한 악기의 여러 차트에 첨부됨)에 대한 시리즈 수의 설정 값 이상의 동시 개통을 금지하는 가장 좋은 방법을 알려주세요.
extern 이중 로트 = 1; // 많은
외부 intExp = 1; // 만료
외부 int 대기 = 0; // 한 방향의 촛불 개수
extern int 시간 초과 = 1; // 시간 간격
extern 이중 승수 = 3; // 승수
extern int 미끄러짐 = 5; // 미끄러짐
외부 정수 MaxOpenOrders = 1; // 동시 오픈 주문의 최대 수
extern int 매직 = 774274; // 마법
int 티켓, 유형;
두 배 가격, 많은;
//+----------------------------------------------- --------------------+
//| 전문가 초기화 기능 |
//+----------------------------------------------- --------------------+
int OnInit()
{
반환(INIT_SUCCESSED);
}
//+----------------------------------------------- --------------------+
//| 전문적인 초기화 해제 기능 |
//+----------------------------------------------- --------------------+
무효 OnDeinit(const int 이유)
{
}
//+----------------------------------------------- --------------------+
//| 전문가 틱 기능 |
//+----------------------------------------------- --------------------+
무효 OnTick()
{
// --------------- 거래 시작 ---------------
if (CountTrades() == 0) // 주문 수는 0과 같아야 합니다.
{
if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)))
// 마지막 거래가 수익성이 없으면 같은 거래가 열리지만 로트가 증가합니다.
{
유형 = TypeLastHistOrder();
if (유형 == OP_BUY) 가격 = 묻기;
if (유형 == OP_SELL) 가격 = 입찰가;
로트 = NormalizeDouble(LotsLastHistOrder()*승수, 2);
티켓 = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)
// 마지막 거래의 이익이 0이면 동일하게 엽니다.
{
유형 = TypeLastHistOrder();
if (유형 == OP_BUY) 가격 = 묻기;
if (유형 == OP_SELL) 가격 = 입찰가;
많은 = NormalizeDouble(LotsLastHistOrder(), 2);
티켓 = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
|| CountHistTrades() == 0)// 마지막 거래가 수익성이 있으면 주문이 열립니다.
{
if (SignalBuy() && MaxOpenOrders > OrdersTotal())
{
티켓 = OrderSend(Symbol(), OP_BUY, lot, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (SignalSell() && MaxOpenOrders > OrdersTotal())
{
티켓 = OrderSend(Symbol(), OP_SELL, 랏, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
}
}
}
//+----------------------------------------------- --------------------+
int CountTrades(int 유형 = -1)
{
정수 cnt = 0;
(int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))
cnt++;
}
}
리턴(cnt);
}
//+----------------------------------------------- --------------------+
int CountHistTrades(int 유형 = -1)
{
정수 cnt = 0;
(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))
cnt++;
}
}
리턴(cnt);
}
//+----------------------------------------------- --------------------+
bool SignalBuy()
{
for (int i=1; i<=대기; i++)
{
if (닫기[i] > 열기[i]) return(false);
}
if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= 대기 || (대기 == 0 && TimeCurrent() >= TimeLastHistOrder()+시간 초과))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
반환(거짓);
}
//+----------------------------------------------- --------------------+
bool SignalSell()
{
for (int i=1; i<=대기; i++)
{
if (닫기[i] < 열기[i]) return(false);
}
if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= 대기 || (대기 == 0 && TimeCurrent() >= TimeLastHistOrder()+시간 초과))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
반환(거짓);
}
//+----------------------------------------------- --------------------+
날짜/시간 TimeLastHistOrder(int 유형 = -1)
{
날짜 시간 마지막 시간 = 0;
날짜 시간 오픈 시간 = 0;
(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))
{
if (OrderCloseTime() > 마지막 시간)
{
마지막 시간 = OrderCloseTime();
오픈타임 = 주문오픈타임();
}
}
}
}
반환(오픈 시간);
}
//+----------------------------------------------- --------------------+
intTypeLastHistOrder()
{
날짜 시간 = 0;
정수 유형 = -1;
(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderCloseTime() > 시간)
{
시간 = OrderCloseTime();
유형 = 주문 유형();
}
}
}
}
반환(유형);
}
//+----------------------------------------------- --------------------+
이중 LotLastHistOrder(int 유형 = -1)
{
날짜 시간 = 0;
이중 로트 = 0;
(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))
{
if (OrderOpenTime() > 시간)
{
시간 = OrderOpenTime();
제비 = OrderLots();
}
}
}
}
반환(많은);
}
//+----------------------------------------------- ------ --------------------+
두 배 PriceCloseLastHistOrder(int 유형 = -1)
{
날짜 시간 = 0;
이중 가격 = 0;
(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))
{
if (OrderCloseTime() > 시간)
{
시간 = OrderCloseTime();
가격 = OrderClosePrice();
}
}
}
}
반품(가격);
}
//+----------------------------------------------- --------------------+
두 배 PriceOpenLastHistOrder(int 유형 = -1)
{
날짜 시간 = 0;
이중 가격 = 0;
(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))
{
if (OrderCloseTime() > 시간)
{
시간 = OrderCloseTime();
가격 = OrderOpenPrice();
}
}
}
}
반품(가격);
}
//+----------------------------------------------- --------------------+
CountTrades 함수에서 OrderSymbol() == Symbol() 조건을 제거하고 OrderType() == OP_BUY || OrderType() == OP_SELL, 맞습니까?
그리고 OnTick에서 OrderSend 전에 조건을 변경합니다. if (SignalBuy() && CountTrades() < MaxOpenOrders )... 그리고 판매도 마찬가지입니다.if (OrderMagicNumber() == Magic && (OrderType() == OrderType() == OP_BUY || OrderType() == OP_SELL))
내가 올바르게 변경 했습니까?
인사말! 바이너리 옵션에서 서로 다른 악기(봇은 동시에 다양한 악기의 여러 차트에 첨부됨)에 대한 시리즈 수의 설정 값 이상의 동시 개통을 금지하는 가장 좋은 방법을 알려주세요.
extern 이중 로트 = 1; // 많은
외부 intExp = 1; // 만료
외부 int 대기 = 0; // 한 방향의 촛불 개수
extern int 시간 초과 = 1; // 시간 간격
extern 이중 승수 = 3; // 승수
extern int 미끄러짐 = 5; // 미끄러짐
외부 정수 MaxOpenOrders = 1; // 동시 오픈 주문의 최대 수
extern int 매직 = 774274; // 마법
int 티켓, 유형;
두 배 가격, 많은;
//+----------------------------------------------- --------------------+
//| 전문가 초기화 기능 |
//+----------------------------------------------- --------------------+
int OnInit()
{
반환(INIT_SUCCESSED);
}
//+----------------------------------------------- --------------------+
//| 전문적인 초기화 해제 기능 |
//+----------------------------------------------- --------------------+
무효 OnDeinit(const int 이유)
{
}
//+----------------------------------------------- --------------------+
//| 전문가 틱 기능 |
//+----------------------------------------------- --------------------+
무효 OnTick()
{
// --------------- 거래 시작 ---------------
if (CountTrades() == 0) // 주문 수는 0과 같아야 합니다.
{
if ((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) < PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) > PriceOpenLastHistOrder(OP_SELL)))
// 마지막 거래가 수익성이 없으면 같은 거래가 열리지만 로트가 증가합니다.
{
유형 = TypeLastHistOrder();
if (유형 == OP_BUY) 가격 = 묻기;
if (유형 == OP_SELL) 가격 = 입찰가;
로트 = NormalizeDouble(LotsLastHistOrder()*승수, 2);
티켓 = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (PriceCloseLastHistOrder() == PriceOpenLastHistOrder() && CountHistTrades() > 0)
// 마지막 거래의 이익이 0이면 동일하게 엽니다.
{
유형 = TypeLastHistOrder();
if (유형 == OP_BUY) 가격 = 묻기;
if (유형 == OP_SELL) 가격 = 입찰가;
많은 = NormalizeDouble(LotsLastHistOrder(), 2);
티켓 = OrderSend(Symbol(), Type, Lot, Price, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (((TypeLastHistOrder() == OP_BUY && PriceCloseLastHistOrder(OP_BUY) > PriceOpenLastHistOrder(OP_BUY))
|| (TypeLastHistOrder() == OP_SELL && PriceCloseLastHistOrder(OP_SELL) < PriceOpenLastHistOrder(OP_SELL)))
|| CountHistTrades() == 0)// 마지막 거래가 수익성이 있으면 주문이 열립니다.
{
if (SignalBuy() && MaxOpenOrders > OrdersTotal())
{
티켓 = OrderSend(Symbol(), OP_BUY, lot, Ask, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
if (SignalSell() && MaxOpenOrders > OrdersTotal())
{
티켓 = OrderSend(Symbol(), OP_SELL, 랏, Bid, Slippage, 0, 0, IntegerToString(Exp), Magic);
}
}
}
}
//+----------------------------------------------- --------------------+
int CountTrades(int 유형 = -1)
{
정수 cnt = 0;
(int i=OrdersTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))
cnt++;
}
}
리턴(cnt);
}
//+----------------------------------------------- --------------------+
int CountHistTrades(int 유형 = -1)
{
정수 cnt = 0;
(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))
cnt++;
}
}
리턴(cnt);
}
//+----------------------------------------------- --------------------+
bool SignalBuy()
{
for (int i=1; i<=대기; i++)
{
if (닫기[i] > 열기[i]) return(false);
}
if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= 대기 || (대기 == 0 && TimeCurrent() >= TimeLastHistOrder()+시간 초과))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
반환(거짓);
}
//+----------------------------------------------- --------------------+
bool SignalSell()
{
for (int i=1; i<=대기; i++)
{
if (닫기[i] < 열기[i]) return(false);
}
if ((iBarShift(Symbol(), 0, TimeLastHistOrder()+Timeout) >= 대기 || (대기 == 0 && TimeCurrent() >= TimeLastHistOrder()+시간 초과))
&& CountHistTrades() > 0) return(true);
if (CountHistTrades() == 0) return(true);
반환(거짓);
}
//+----------------------------------------------- --------------------+
날짜/시간 TimeLastHistOrder(int 유형 = -1)
{
날짜 시간 마지막 시간 = 0;
날짜 시간 오픈 시간 = 0;
(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))
{
if (OrderCloseTime() > 마지막 시간)
{
마지막 시간 = OrderCloseTime();
오픈타임 = 주문오픈타임();
}
}
}
}
반환(오픈 시간);
}
//+----------------------------------------------- --------------------+
intTypeLastHistOrder()
{
날짜 시간 = 0;
정수 유형 = -1;
(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderCloseTime() > 시간)
{
시간 = OrderCloseTime();
유형 = 주문 유형();
}
}
}
}
반환(유형);
}
//+----------------------------------------------- --------------------+
이중 LotLastHistOrder(int 유형 = -1)
{
날짜 시간 = 0;
이중 로트 = 0;
(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))
{
if (OrderOpenTime() > 시간)
{
시간 = OrderOpenTime();
제비 = OrderLots();
}
}
}
}
반환(많은);
}
//+----------------------------------------------- --------------------+
두 배 PriceCloseLastHistOrder(int 유형 = -1)
{
날짜 시간 = 0;
이중 가격 = 0;
(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))
{
if (OrderCloseTime() > 시간)
{
시간 = OrderCloseTime();
가격 = OrderClosePrice();
}
}
}
}
반품(가격);
}
//+----------------------------------------------- --------------------+
두 배 PriceOpenLastHistOrder(int 유형 = -1)
{
날짜 시간 = 0;
이중 가격 = 0;
(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && (OrderType() == 유형 || 유형 == -1))
{
if (OrderCloseTime() > 시간)
{
시간 = OrderCloseTime();
가격 = OrderOpenPrice();
}
}
}
}
반품(가격);
}
//+----------------------------------------------- --------------------+
시간은 날짜/시간 형식으로 즉시 설정할 수 있으며 변환 시 시스템 시간을 낭비할 필요가 없습니다. 작동 방식은 다음과 같습니다.
외부 날짜 시간 시작 시간 = D'07:00' ;
이 시간 형식에서는 어드바이저를 시작할 때 어드바이저의 편집 날짜를 가져오지만 오늘을 원합니다.
어떻게 고치는 지?
이 시간 형식에서는 어드바이저를 시작할 때 어드바이저의 편집 날짜를 가져오지만 오늘을 원합니다.
어떻게 고치는 지?
시작 시 나머지 사용자 매개변수와 동일한 방식으로 매개변수를 원하는 매개변수로 변경합니다.
그리고 어떤 이유로 스크립트가 시작된 시점의 현재 날짜를 보여줍니다.
어떤 목적으로 MagicNumber를 사용하는지 알려주십시오 . 이 전략에서 이것이 무엇을 제공합니까? IMHO , 여기에서 OnInit OnDeinit 기능을 버릴 수도 있습니다.