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

 
A13ksandr : 죄송합니다! 물론 void OnTick()의 모든 것이 발생합니다. 설명)
그런 다음 오류 코드가 테스터의 로그에 있으며 더 이해할 수 있습니다.
 
evillive :
그런 다음 오류 코드가 테스터의 로그에 있으며 더 이해할 수 있습니다.

오류가 없습니다. 그것은 절차에 갈 때 그냥 멈 춥니 다. 그리고 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();

}

}

}

}

반품(가격);

}

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

 
alvlaf :

CountTrades 함수에서 OrderSymbol() == Symbol() 조건을 제거하고 OrderType() == OP_BUY || OrderType() == OP_SELL, 맞습니까?

그리고 OnTick에서 OrderSend 전에 조건을 변경합니다. if (SignalBuy() && CountTrades() < MaxOpenOrders )... 그리고 판매도 마찬가지입니다.
 
A13ksandr :
고마워, 나는 그것을 시도했다 - 봇은 각 틱 에 많은 주문을 열기 시작했습니다.
 
A13ksandr :

if (OrderMagicNumber() == Magic && (OrderType() == OrderType() == OP_BUY || OrderType() == OP_SELL))

내가 올바르게 변경 했습니까?

[삭제]  
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 기능을 버릴 수도 있습니다.
 
evillive :


시간은 날짜/시간 형식으로 즉시 설정할 수 있으며 변환 시 시스템 시간을 낭비할 필요가 없습니다. 작동 방식은 다음과 같습니다.

외부 날짜 시간 시작 시간 = D'07:00' ;

이 시간 형식에서는 어드바이저를 시작할 때 어드바이저의 편집 날짜를 가져오지만 오늘을 원합니다.

어떻게 고치는 지?

 
RichLux :

이 시간 형식에서는 어드바이저를 시작할 때 어드바이저의 편집 날짜를 가져오지만 오늘을 원합니다.

어떻게 고치는 지?

시작 시 나머지 사용자 매개변수와 동일한 방식으로 매개변수를 원하는 매개변수로 변경합니다.

그리고 어떤 이유로 스크립트가 시작된 시점의 현재 날짜를 보여줍니다.

 
LRA :
어떤 목적으로 MagicNumber를 사용하는지 알려주십시오 . 이 전략에서 이것이 무엇을 제공합니까? IMHO , 여기에서 OnInit OnDeinit 기능을 버릴 수도 있습니다.
"이 전략에서"라는 단어의 목적은 무엇입니까? 계정에서 수동으로 거래가 이루어지거나 이러한 주문이 건드리지 않도록 다른 Expert Advisor가 실행 중인 경우 Magic이 필요합니다. 그렇게 생각해요.