一个顾问,会在发射后在五分钟的图表上跟随汇率的情况。 - 页 13

 
rid:
销售员77
再次发生意外。
我想让上面的代码发挥作用。日志中出现了一个错误,其内容是:"你的工作是什么?
18:38:23 '153085': 卖出1.00 GBPUSD开盘价2.0006的订单 sl: 2.0019 tp: 2.0003失败 [无效的S/L或T/P]
这有什么意义呢?


1) 你用的是什么MT4?

2)该经纪公司允许的止损和止盈距离是多少?

http://www.forex4you.org/
在此之前,昨天使用这些参数t/r和s/l,一切都在工作:(()
 
rid:
int start()
我想这样做...
它不是这样的,条件在那里--交易不成功。日志是无声的:(
 
把整个代码放在这里。并向那里的区政府查询--允许的停车距离与价格。
 

合同规格



符号 命名 1批用于微型
(用于微型*100)
保证金(margin)
,用于微型
(用于微型*100)
传播 限价和止损
水平
差距水平

互换
互换
出售
欧元兑美元 欧元兑美元 1000欧元 10欧元 2 2 8 0.15 -0.51
英镑兑美元 英镑/美元 1000英镑 10英镑
3 3 12 0.80 -1.52
 
而这里是整个代码。
//+------------------------------------------------------------------+
//|                                                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));
}

 

这句话似乎有问题

if (NumberOfBarOpenLastPos("", 0,  -1, MagicNumber)>0){

如果没有这个条件,专家顾问就会工作...

你为什么要在那里放一些参数来计算地段?你不需要它...

 

//+------------------------------------------------------------------+
//|                                                Expert-000001.mq4 |
//|                                    Copyright © 2008, salesman*** |
//|                                         http://www.forexgrand.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008, salesman***"
#property link      "http://www.forexgrand.ru"
 
//----
extern double StopLoss=13;                               // Stop Loss
extern double TakeProfit=3;                              // Take Profit
//extern int Percent=70;
                               
extern double Slippage =4;                               // Максимальное отклонение от запрошенной цены
extern int MagicNumber=111111;                                // Order ID
extern int Delta=15;                                     // Сигнал приказа в пунктах
 
 int  ticket;
//-- Подключаемые модули --
#include  <b-Lots.mqh> 
#include <stdlib.mqh>
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
并把b-lots库本身放在iclude文件夹中。

并在每个OrderSend 函数前插入

  Lots=GetSizeLot(); 
  ticket=OrderSend(Symbol(... ...

 
rid:
把b-lots库本身放在iclude文件夹中

并在每个OrderSend

函数前插入
  Lots=GetSizeLot(); 
  ticket=OrderSend(Symbol(... ...
我都做了,但编译器产生了一个错误。
'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(来自库)。

//+------------------------------------------------------------------+
//|                                                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 double StopLoss=13;                               // Stop Loss
extern double TakeProfit=3;                              // Take Profit
//extern int Percent=70;
 
extern double Slippage =4;                               // Максимальное отклонение от запрошенной цены
extern int MagicNumber=0;                                // Order ID
extern int Delta=15;                                     // Сигнал приказа в пунктах
//extern int TimeForSleep = 0;                           // Время для отдыха после сделки
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));
} */

看看吧。它到底行不行?我运行了一次 - 它工作...

而且它也很有效。我仍然需要理解这个功能

NumberOfBarOpenLastPos(string sym="", int tf=0, int op=-1, int mn=-1)
 
我保存了b-lots库,它是否也应该通过编译检查错误?
弹出一个警告:
启动功能 没有找到,不能运行。
它是什么意思?