포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 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이 필요합니다. 그렇게 생각해요.
사유: