Ein Berater, der den Kurs auf einem Fünf-Minuten-Chart mit Bedingungen nach dem Start verfolgen würde: - Seite 13
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Wieder ein Missgeschick.
Ich versuche, den obigen Code zum Funktionieren 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?
1) Und welche DT verwenden Sie für MT4?
2) Wie groß ist der zulässige Stoploss- und Takeprofit-Abstand in diesem Brokerhaus?
Davor, gestern mit diesen Parametern t/r und s/l hat alles funktioniert :(((
Ich würde das tun...
Vertragsspezifikationen
(für mini *100)
für micro
(für mini *100)
levels
kaufen
Verkauf
//+------------------------------------------------------------------+ //| Expert-000001.mq4 | //| Copyright © 2008, salesman*** | //| http://www.forexgrand.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, salesman***" #property link "http://www.forexgrand.ru" //---- extern string _Parameters_b_Lots = "Параметры модуля расчёта лота"; extern int LotsWayChoice = 0; // Способ выбора рабочего лота // 0-фиксированный, // 1-процент от депозита, // 2-фракционно-пропорциональный, // 3-фракционно-фиксированный, //extern int LotsPercent = 40; // Процент от депозита extern double StopLoss=13; // Stop Loss extern double TakeProfit=3; // Take Profit //extern int Percent=70; extern double Lots=1; // Объем сделки в % extern double Slippage =4; // Максимальное отклонение от запрошенной цены extern int MagicNumber=0; // Order ID extern int Delta=15; // Сигнал приказа в пунктах //extern int TimeForSleep = 0; // Время для отдыха после сделки extern int ticket; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } int start() { int total=OrdersTotal(); if(total<1) {// если нет открытых позиций if (NumberOfBarOpenLastPos("", 0, -1, MagicNumber)>0){ //--- if (Ask - iOpen(NULL,0,0)>=Delta*Point) //Цена выросла больше Delta пунктов - продаем!!! { ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"Продал"); if(ticket<0){Print("Ошибка открытия ордера SELL #",GetLastError());return(0);} } //------------------------------------------------------------------------- if (iOpen(NULL,0,0)-Bid >=Delta*Point) //цена упала больше Delta пунктов - покупаем!!! { ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Купил"); if(ticket<0){Print("Ошибка открытия ордера BUY #",GetLastError());return(0);} } //---- } //if (NumberOfBarOpenLastPos }//if(OrdersTotal 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)); }Mit der Zeile scheint etwas nicht in Ordnung zu sein
Ohne diese Bedingung arbeitet der Expert Advisor...
Warum haben Sie dort einige Parameter zur Berechnung des Loses angegeben? Du brauchst es nicht...
'Lots' - Variable bereits definiert C:\Programmdateien\MetaTrader - E-Global TFG\experts\expert-001.mq4 (21, 15)
Hier ist der Code:
//+------------------------------------------------------------------+ //| Expert-001.mq4 | //| Copyright © 2008, salesman*** | //| http://www.forexgrand.ru | //+------------------------------------------------------------------+ #property copyright "Copyright © 2008, salesman***" #property link "http://www.forexgrand.ru" #include <b-Lots.mqh> #include <stdlib.mqh> //---- //extern string _Parameters_b_Lots = "Параметры модуля расчёта лота"; //extern int LotsWayChoice = 0; // Способ выбора рабочего лота // 0-фиксированный, // 1-процент от депозита, // 2-фракционно-пропорциональный, // 3-фракционно-фиксированный, //extern int LotsPercent = 40; // Процент от депозита extern double StopLoss=13; // Stop Loss extern double TakeProfit=3; // Take Profit //extern int Percent=70; extern double Lots=0.9; // Объем сделки в % extern double Slippage =4; // Максимальное отклонение от запрошенной цены extern int MagicNumber=0; // Order ID extern int Delta=15; // Сигнал приказа в пунктах //extern int TimeForSleep = 0; // Время для отдыха после сделки extern int ticket; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } int start() { int total=OrdersTotal(); if(total<1) {// если нет открытых позиций if (NumberOfBarOpenLastPos("", 0, -1, MagicNumber)>0){ //--- if (Ask - iOpen(NULL,0,0)>=Delta*Point) //Цена выросла больше Delta пунктов - продаем!!! { Lots=GetSizeLot(); ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"Продал"); if(ticket<0){Print("Ошибка открытия ордера SELL #",GetLastError());return(0);} } //------------------------------------------------------------------------- if (iOpen(NULL,0,0)-Bid >=Delta*Point) //цена упала больше Delta пунктов - покупаем!!! { Lots=GetSizeLot(); ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Bid-StopLoss*Point,Ask+TakeProfit*Point,"Купил"); if(ticket<0){Print("Ошибка открытия ордера BUY #",GetLastError());return(0);} } //---- } //if (NumberOfBarOpenLastPos }//if(OrdersTotal 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)); }Ich habe Ihnen gesagt, Sie sollen es bei den externen Parametern belassen. Die Parameter der Losberechnung werden dann auf PROPERTIES (aus der Bibliothek) gesetzt.
Sehen Sie sich das an. Funktioniert es oder nicht? Ich habe es einmal ausprobiert - es funktioniert...
Und es funktioniert auch. Ich muss die Funktion noch verstehen
NumberOfBarOpenLastPos(string sym="", int tf=0, int op=-1, int mn=-1)Es wird eine Warnung angezeigt:
Startfunktion nicht gefunden und kann nicht ausgeführt werden.
Was bedeutet das?