//+----------------------------------------------------------------------------+//| Возвращает номер бара открытия последней позиции или -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));
}
Und damit es funktioniert, fügen Sie die Zeile vor dem Kauf/Verkauf ein:
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);}}//ххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххххх}
So habe ich es gemacht, und es hat sich gut kompiliert. Es wird keine Fallstricke geben?
//------------------------------
//+----------------------------------------------------------------------------+
//| Возвращает номер бара открытия последней позиции или -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);
}
Und wird diese Zeile im Code überflüssig sein? :
if(OrdersTotal()!=0) return; //Выполнять только одну сделку.
Ein weiteres Missgeschick. Ich versuche, den obigen Code zum Laufen zu bringen. Im Protokoll erscheint ein Fehler mit dem Text: 18:38:23 '153085': Auftrag verkaufen 1.00 GBPUSD Eröffnung bei 2.0006 sl: 2.0019 tp: 2.0003 fehlgeschlagen [Ungültiger S/L oder T/P] Was hat das zu bedeuten?
salesman77: Wieder ein Problem. Ich versuche den oben beschriebenen Code. Im Protokoll erscheint ein Fehler mit dem Text: 18:38:23 '153085': Auftrag verkaufen 1.00 GBPUSD Eröffnung bei 2.0006 sl: 2.0019 tp: 2.0003 fehlgeschlagen [Ungültiger S/L oder T/P] Was hat das zu bedeuten?
1) Und welchen MT4 verwenden Sie?
2) Wie groß ist der zulässige Abstand zwischen Stoploss und Takeprofit in diesem DC?
Fügen Sie eine Funktion am Ende des Codes ein -
Und damit es funktioniert, fügen Sie die Zeile vor dem Kauf/Verkauf ein:
und sehen, was passiert.Immer noch Fehler... Fehler...
//------------------------------ //+----------------------------------------------------------------------------+ //| Возвращает номер бара открытия последней позиции или -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); }Und wird diese Zeile im Code überflüssig sein? :Ich versuche, den obigen Code zum Laufen zu bringen. Im Protokoll erscheint ein Fehler mit dem Text:
18:38:23 '153085': Auftrag verkaufen 1.00 GBPUSD Eröffnung bei 2.0006 sl: 2.0019 tp: 2.0003 fehlgeschlagen [Ungültiger S/L oder T/P]
Was hat das zu bedeuten?
Wieder ein Problem.
Ich versuche den oben beschriebenen Code. Im Protokoll erscheint ein Fehler mit dem Text:
18:38:23 '153085': Auftrag verkaufen 1.00 GBPUSD Eröffnung bei 2.0006 sl: 2.0019 tp: 2.0003 fehlgeschlagen [Ungültiger S/L oder T/P]
Was hat das zu bedeuten?
1) Und welchen MT4 verwenden Sie?
2) Wie groß ist der zulässige Abstand zwischen Stoploss und Takeprofit in diesem DC?