[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 5. - 页 132

 
Roman.:

IMHO,不复杂,但非常容易 "指导 "或发送。

那么,"发送 "即 "发送 "当然比建议更容易。而事实上,我并没有问什么,以便在课本上戳穿我。在一个地方写了一个重复的东西,没错,但本质并没有改变。

artmedia70:

最后,告诉我你到底想做什么...例如:MAK某某正在上涨,并且高于MAK某某,而价格在某个点位低于/高于MAK某某,如果是真的,那么在某个距离下挂单。我将给你一个粗略的算法。因为当你的代码片段被撕掉时,很难引导你走向正确的方向。毕竟这个任务是给五年级的学生的(夸张地)。



这里我附上一个测试版本的代码,并在我的帖子中也公布了它。

//+-----------------------------------------------------------------------------------+
//|                                                                       test_Ma.mq4 |
//|                                                                               hoz |
//|                                                                                   |
//+-----------------------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

extern string ___H0 = " ___________ Параметры МА ____________ ";
extern int i_TF = 0,
           i_fastMaPeriod = 10,
           i_slowMaPeriod = 21;
extern string ___H1 = " _____ Параметры ордера _______";
extern int i_magic = 3333021;
extern double i_thresholdFromMa = 5;                           // Отступ от МА
// Машечки
double fastMa,
       slowMa;
double pt;
// Переменные рыночного окружения
double g_spread,
       g_stopLevel,
       g_tickSize;
// Идентификаторы положений машек
#define MA_DIRECT_TO_UP      0                                 // Машки направлены вверх
#define MA_DIRECT_TO_DOWN    1                                 // Машки направлены вниз
#define MA_DIRECT_TO_NONE   -1                                 // Машки во флете
#define SIGNAL_BUY           0                                 // Сигнал на покупку
#define SIGNAL_SELL          1                                 // Сигнал на продажу
#define SIGNAL_NO           -1                                 // Сигнала нет

//+-------------------------------------------------------------------------------------+
//| Функция иницилизации                                                                |
//+-------------------------------------------------------------------------------------+
int init()
{
   GetMarketInfo();
   
   if (Digits  == 2 || Digits == 4)
       pt = Point;
   if (Digits == 1 || Digits == 3 || Digits == 5)
       pt = Point * 10;
   if (Digits == 6)
       pt = Point * 100;
   if (Digits == 7)
       pt = Point * 1000;
   

  return (0);
}
//+-------------------------------------------------------------------------------------+
//| Функция деиницилизации                                                              |
//+-------------------------------------------------------------------------------------+
int deinit()
{
//----
   
//----
  return (0);
}
//+-------------------------------------------------------------------------------------+
//| Сбор рыночных данных                                                                |
//+-------------------------------------------------------------------------------------+
void GetMarketInfo()
{
  g_spread = MarketInfo(Symbol(),MODE_SPREAD);
  g_stopLevel = MarketInfo(Symbol(),MODE_STOPLEVEL);
  g_tickSize = MarketInfo(Symbol(),MODE_TICKSIZE);
}
//+-------------------------------------------------------------------------------------+
//| Функция нормализации                                                                |
//+-------------------------------------------------------------------------------------+
double ND(double A)
{
  return (NormalizeDouble(A, Digits));
}
//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy(double fastMa, double slowMa)
{
   int ticket = -1;
   
   if ((fastMa + i_thresholdFromMa * pt) > Ask)           // Проверка что цена открытия выше Ask, т.к. у нас вход отложенником

       ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
   
   if (ticket > 0)
 
   return (true);
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell(double fastMa, double slowMa)
{
   int ticket = -1;
   
   if ((fastMa - i_thresholdFromMa * pt) < Bid)           // Проверка что цена открытия ниже Bid, т.к. у нас вход отложенником
   
       ticket = OrderSend(Symbol(), OP_SELLSTOP, 0.1, ND(fastMa - i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);
       
   if (ticket > 0)
    
   return (true);
}
//+-------------------------------------------------------------------------------------+
//| Получаем относительное положение машек                                              |
//+-------------------------------------------------------------------------------------+
int GetStateMa(double fastMa, double slowMa)
{
   if (fastMa > slowMa)                          // Если условия выполнены, то..
       return (MA_DIRECT_TO_UP);                 // ..машки направлены вниз
   
   if (fastMa < slowMa)                          // Если условия выполнены, то..
       return (MA_DIRECT_TO_DOWN);               // машки направлены вверх
   
   return (MA_DIRECT_TO_NONE);                   // Машки не имеют выраженного направления
}
//+-------------------------------------------------------------------------------------+
//| Открытие позиций                                                                    |
//+-------------------------------------------------------------------------------------+
bool Trade(int signal)
{
   if (signal == SIGNAL_BUY)                     // Если сигнал на покупку..
       if (!OpenBuy(fastMa, slowMa))             // ..покупаем
          return(false);
   
   if (signal == SIGNAL_SELL)                   // Если сигнал на продажу..
       if (!OpenSell(fastMa, slowMa))           // ..продаём
          return(false);
       
   return (true);
}
//+-------------------------------------------------------------------------------------+
//| Получаем общий сигнал на открытие позиции                                           |
//+-------------------------------------------------------------------------------------+
int GetSignal()
{
   if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_UP)       // Если машки указывают вверх..
       if ( MathAbs(Ask - fastMa) <= i_thresholdFromMa * pt ) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa..
           return(SIGNAL_BUY);                       // ..функция возвращает сигнал покупки

   if (GetStateMa(fastMa, slowMa) == MA_DIRECT_TO_DOWN)      // Если машки указывают вниз..
       if ( MathAbs(Bid - fastMa) <= i_thresholdFromMa * pt ) // ..зазор между ценой продажи и машки, <= i_thresholdFromMa..
       return(SIGNAL_SELL);                          // ..функция возвращает сигнал продажи
   
   return (SIGNAL_NO);
}
//+-------------------------------------------------------------------------------------+
//| Функция start                                                                       |
//+-------------------------------------------------------------------------------------+
int start()
{
   fastMa = iMA(NULL,i_TF,i_fastMaPeriod,0,MODE_EMA,MODE_CLOSE,1);
   slowMa = iMA(NULL,i_TF,i_slowMaPeriod,0,MODE_EMA,MODE_CLOSE,1);

// Отслеживание открытия нового бара
   static datetime lastBarTime = 0;    // Время проведения последних рассчётов
   
   if (lastBarTime == iTime(NULL, 0, 0))         // На текущем баре все необходимые действия..
       return (0);                      // ..уже были выполнены

// Рассчёт сигнала   
   int signal = GetSignal();
   
// Проведение торговых операций
   if (signal != SIGNAL_NO)
       if (!Trade(signal))
           return (0);
   
   lastBarTime = iTime(NULL, 0, 0);              // На текущем баре все необходимые действия..
                                       // .. успешно выполнены
  return (0);
}

条件明确说,订单的价格高于(低于)MA+(-)偏离MA。

在这里,它是。

if ( MathAbs(Ask - fastMa) <= i_thresholdFromMa * pt )

只有当价格处于MA+(-)缩进的"缺口 "区域 时,才应该计算信号。

例如,在一个购买功能中。

ticket = OrderSend(Symbol(), OP_BUYSTOP, 0.1, ND(fastMa + i_thresholdFromMa * pt), 3, 0, 0, NULL, i_magic, 0);

购买必须高于fastMai_thresholdFromMa * pt

事实上,它是不存在的。要么是语言上的错误,要么是挥舞中的错误。我还能怎么解释我的需求呢?我已经给出了整个代码,没有额外的条件和功能(只有一个裸露的信号和开口)

它已经写得很清楚了(对于一个测试者来说,我没有检查它的真实性!

下面是它的打开方式。

错的地方开...

artmedia70:


关于强调:在开盘价上下功夫,那么在零点栏上就不会有MAs重绘。

我特别在第1条上做了一个条件,所以没有混淆。最主要的是如何运行它...
附加的文件:
test_ma.mq4  8 kb
 
例如,每小时的第四个五分钟的开始标志必须在指标中定义。
if( Minute()==15)
什么都不缺。把它推向正确的方向。
 

我有一个问题--如果我在制定交易标准时使用向右移动的移动平均线--即移动值为正。

那么在形成信号时,我不应该使用零点或第一个柱子上的移动平均线的值,而是使用与移位值相对应的指数的柱子。

 
Operr:
例如,每小时的第四个五分钟的开始标志必须在指标中定义。


if( Minute()==15)// так будет работать в течении 1 минуты (от 15 до 16)
if( Minute()>=15)// так от 15 минут и до конца текущего часа
 
Tincup:

我有一个问题--如果我在制定交易标准时使用向右移动的移动平均线--即移动值为正。

那么在形成信号时,我不应该使用零点或第一个柱子上的移动平均线的值,而是使用与移位值相对应的指数的柱子。


把移动平均线放在图表上,看看你需要什么指数。你可以直观地看到它。
 
hoz:

嗯,毫无疑问,"发送 "即 "发送 "比建议更容易。事实上,我没有要求任何东西来戳我的课本。我在一个地方写了一个重复的内容,但本质并没有改变。

这里我附上了测试代码的变体,我也把它发布在我的帖子里。

条件明确说,订单的价格高于(低于)MA+(-)偏离MA。

在这里,它是。

只有当价格处于MA+(-)缩进的"缺口 "区域 时,才应该计算信号。

例如,在一个购买功能中。

购买必须高于fastMai_thresholdFromMa * pt

事实上,它并不存在。要么是我的语言有问题,要么是我的鼠标有问题。我还能怎么解释我的需求呢?我给出了一个没有附加条件和功能的完整代码(只有一个裸露的信号和开盘)

它已经写得很清楚了(对于一个测试者来说,我没有检查它的真实性!

下面是它的打开方式。

我特别在第1条上做了一个条件,所以没有混淆。最主要的是如何运行它...
我再次问:你到底什么时候要下订单?不是 你的代码答案(不想了解它--有足够的自己的代码进行分析),而只是文字

例如:我想在一个MA上面/下面放置一个挂单,距离为...巴,巴,巴,巴,巴,巴,巴...。

第二次,请解释一下,有这么难吗?我们早就解决了你的问题。

 
还有:如果你把fastMA和slowMA定义为全局,为什么要把它们传给一个函数?反正所有的函数都可以看到它们,不需要把它们的参数传给被调用的函数
 

下午好。

能否请您谈谈如何处理EA中的GAP?

我经常在周末收到GEP,它们发生后,与订单的工作就会挂起,如何解决这个问题,非常感谢!

 

Artyom,你认为什么会更快,用MathMax 表达还是用if?

double dist = MathMax(MathMax(NormalizeDouble(Dist*Point,Digits),spread),MathMax(StopLevel,FreezeLevel));//это?
// или это?
double dist = NormalizeDouble(Dist*Point,Digits);
if(dist < spread) dist = spread;
if(dist < StopLevel) dist = StopLevel;
if(dist < FreezeLevel) dist = FreezeLevel;


我没有用语言解释,因为很明显,这种表达方式为我避免错误提供了服务130,而且它为我提供了完美的服务

提前感谢!

 
hoz:

把平均数放在图表上,看看你需要什么指数。你可以直观地看到它。

我说过,我不太明白你的回答,所以我再问你一次。我对你的理解是否正确,在制定交易条件时

你应该使用相应条数的MA值,而不是图片中标有黄色箭头的值,向后退。

我按照我对你的答案的理解画了这个图。