//+----------------------------------------------------------------------------+//| Возвращает номер бара открытия последней позиции или -1. |//| Параметры: |//| sym - наименование инструмента ("" - текущий символ) |//| tf - таймфрейм ( 0 - текущий таймфрейм) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+intNumberOfBarOpenLastPos(stringsym="", inttf=0, intop=-1, intmn=-1){datetimeoot;
inti, k=OrdersTotal();
if(sym=="")sym=Symbol();
for(i=0; i<k; i++){if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){if(OrderSymbol()==sym){if(OrderType()==OP_BUY || OrderType()==OP_SELL){if(op<0 || OrderType()==op){if(mn<0 || OrderMagicNumber()==mn){if(oot<OrderOpenTime())oot=OrderOpenTime();
}}}}}}return(iBarShift(sym, tf, oot, True));
}
그리고 그것이 작동하려면 구매 / 판매하기 전에 다음 줄을 삽입하십시오.
if(NumberOfBarOpenLastPos(здесь сам всё расставь)>0){//если на текущ. баре не было сделок //хххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххif(Bid - iOpen(NULL,0,0)>=Delta*Point)//Цена выросла на больше или = Delta пунктов//продаем-{ticket=OrderSend(Symbol(),1,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"продал",MagicNumber,22222,Red);
if(ticket<0){Print("Ошибка открытия ордера SELL #",GetLastError());return(0);}}//-------------------------------------------------------------------------if(iOpen(NULL,0,0)-Bid >Delta*Point)//цена упала более дельты - покупаем{ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,
"Купил",MagicNumber,11111,Green);
if(ticket<0){Print("Ошибка открытия ордера BUY #",GetLastError());return(0);}}//ххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххх}
//------------------------------
//+----------------------------------------------------------------------------+
//| Возвращает номер бара открытия последней позиции или -1. |
//| Параметры: |
//| sym - наименование инструмента ("" - текущий символ) |
//| tf - таймфрейм ( 0 - текущий таймфрейм) |
//| op - операция (-1 - любая позиция) |
//| mn - MagicNumber (-1 - любой магик) |
//+----------------------------------------------------------------------------+
int NumberOfBarOpenLastPos(string sym="", int tf=0, int op=-1, int mn=-1) {
datetime oot;
int i, k=OrdersTotal();
if (sym=="") sym=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==sym) {
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (oot<OrderOpenTime()) oot=OrderOpenTime();
}
}
}
}
}
}
return(iBarShift(sym, tf, oot, True));
}
int start()
{
if (NumberOfBarOpenLastPos()>0)
if(OrdersTotal()!=0) return; //Выполнять только одну сделку.
//---
if (Ask - iOpen(NULL,0,0)>=Delta*Point) //Цена выросла больше Delta пунктов - продаем!!!
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"Продал");
}
//-------------------------------------------------------------------------
if (iOpen(NULL,0,0)-Bid >=Delta*Point) //цена упала больше Delta пунктов - покупаем!!!
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Купил");
}
//----
return(0);
}
그러나 코드의 이 줄은 불필요할까요? :
if(OrdersTotal()!=0) return; //Выполнять только одну сделку.
salesman77 : 다시 불운. 위의 코드를 작동시키려고 합니다. 다음 텍스트와 함께 오류가 로그에 나타납니다. 18:38:23 '153085': 주문 매도 1.00 GBPUSD 2.0006 sl: 2.0019 tp: 2.0003 실패 [잘못된 S/L 또는 T/P] 무슨 뜻인가요?
코드 끝에 함수 삽입 -
그리고 그것이 작동하려면 구매 / 판매하기 전에 다음 줄을 삽입하십시오.
그리고 무슨 일이 일어나는지 보십시오.모두 동일, 오류 ... 오류 ...
//------------------------------ //+----------------------------------------------------------------------------+ //| Возвращает номер бара открытия последней позиции или -1. | //| Параметры: | //| sym - наименование инструмента ("" - текущий символ) | //| tf - таймфрейм ( 0 - текущий таймфрейм) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int NumberOfBarOpenLastPos(string sym="", int tf=0, int op=-1, int mn=-1) { datetime oot; int i, k=OrdersTotal(); if (sym=="") sym=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sym) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (oot<OrderOpenTime()) oot=OrderOpenTime(); } } } } } } return(iBarShift(sym, tf, oot, True)); } int start() { if (NumberOfBarOpenLastPos()>0) if(OrdersTotal()!=0) return; //Выполнять только одну сделку. //--- if (Ask - iOpen(NULL,0,0)>=Delta*Point) //Цена выросла больше Delta пунктов - продаем!!! { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"Продал"); } //------------------------------------------------------------------------- if (iOpen(NULL,0,0)-Bid >=Delta*Point) //цена упала больше Delta пунктов - покупаем!!! { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Купил"); } //---- return(0); }그러나 코드의 이 줄은 불필요할까요? :위의 코드를 작동시키려고 합니다. 다음 텍스트와 함께 오류가 로그에 나타납니다.
18:38:23 '153085': 주문 매도 1.00 GBPUSD 2.0006 sl: 2.0019 tp: 2.0003 실패 [잘못된 S/L 또는 T/P]
무슨 뜻인가요?
다시 불운.
위의 코드를 작동시키려고 합니다. 다음 텍스트와 함께 오류가 로그에 나타납니다.
18:38:23 '153085': 주문 매도 1.00 GBPUSD 2.0006 sl: 2.0019 tp: 2.0003 실패 [잘못된 S/L 또는 T/P]
무슨 뜻인가요?
1) 어떤 DC에서 MT4를 사용합니까?
2) 이 DC에서 허용 가능한 손절매와 이익실현 거리가 얼마입니까?