세일즈맨77 : 다시 불운. 위의 코드를 작동시키려고 합니다. 다음 텍스트와 함께 오류가 로그에 나타납니다. 18:38:23 '153085': 주문 매도 1.00 GBPUSD 2.0006 sl: 2.0019 tp: 2.0003 실패 [잘못된 S/L 또는 T/P] 무슨 뜻인가요?
1) 어떤 DC에서 MT4를 사용합니까?
2) 이 DC에서 허용 가능한 손절매와 이익실현 거리가 얼마입니까?
http://www.forex4you.org/ 그 전에는 어제 모든 것이 그러한 매개변수 t/r 및 s/l로 작동했습니다 :(((
다시 불운.
위의 코드를 작동시키려고 합니다. 다음 텍스트와 함께 오류가 로그에 나타납니다.
18:38:23 '153085': 주문 매도 1.00 GBPUSD 2.0006 sl: 2.0019 tp: 2.0003 실패 [잘못된 S/L 또는 T/P]
무슨 뜻인가요?
1) 어떤 DC에서 MT4를 사용합니까?
2) 이 DC에서 허용 가능한 손절매와 이익실현 거리가 얼마입니까?
그 전에는 어제 모든 것이 그러한 매개변수 t/r 및 s/l로 작동했습니다 :(((
이렇게 하면 되겠다...
계약 사양
(미니*100용)
마이크로
(미니*100용)
레벨
갭
구입
판매
//+------------------------------------------------------------------+ //| 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)); }라인에 뭔가 문제가 있는듯
이 조건이 없으면 Expert Advisor가 작동합니다...
왜 거기에 로트 계산을 위한 몇 가지 매개변수를 삽입했습니까? 그것은 필요는 없습니다...
'Lots' - 변수가 이미 정의됨 C:\Program Files\MetaTrader - E-Global TFG\experts\expert-001.mq4 (21, 15)
코드는 다음과 같습니다.
//+------------------------------------------------------------------+ //| 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)); }나는 당신에게 외부 매개 변수를 남겨 둘 필요가 있다고 썼습니다. 그러면 로트 계산을 위한 매개변수가 PROPERTIES에 배치됩니다(라이브러리에서).
확인하다. 작동 여부 한번 실행해보니 잘되네요...
그리고 MM도 작동합니다. 기능을 처리하는 것이 남아 있습니다.
NumberOfBarOpenLastPos(문자열 sym="", int tf=0, int op=-1, int mn=-1)경고 팝업:
시작 기능 을 찾을 수 없으며 실행할 수 없습니다.
그게 무슨 뜻이야?