我写指标、EA,不再是免费的了 :) - 页 6

 
KimIV >> :
功能参数不正确。准确检查你传递给OrderClose()函数的内容。

检查了一下...真的不知道问题出在哪里......我已经尝试了很多不同的东西%(

 

又是晚上好 :)

有了新的要求。我意识到,无论如何,我自己是无法弄清楚的。

我要求在WATR指标的基础上编写一个EA(EA代码如下)。当指标出现转折时,它会关闭未平仓的订单(如果它没有被SL或TP关闭),并按照指标显示的方向打开一个新订单。我们只在反转点准确地开出一个订单。然后我们等到EA的下一次反转。

输入参数:手数、SL、TP、滑点。我想我没有忘记任何事情 :)

问候,斯维特拉娜。ICQ 320355718

该指标的代码。

//+------------------------------------------------------------------+
//| WATR.mq4
//|由WizardSerg在文章konkop下撰写的|。
//| "现代交易" #4/2001 |
//| http://www.wizardserg.inweb.ru |
//| wizardserg@mail.ru |
//+------------------------------------------------------------------+
#财产版权 "由WizardSerg在<现代交易>#4/2001的konkop文章下撰写"
#属性链接 "http://www.wizardserg.inweb.ru"
//----
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Coral
#属性 indicator_color2 DodgerBlue
//---- 输入参数
外部的WATR_K = 10。
外置双WATR_M = 4.0。
外在的内在的ATR=21。
//---- 缓冲区
双倍ExtMapBufferUp[]。
双重ExtMapBufferDown[]。
//+------------------------------------------------------------------+
//|自定义指标初始化功能
//+------------------------------------------------------------------+
int init()
{
IndicatorBuffers(2)。
SetIndexBuffer(0, ExtMapBufferUp)。
ArraySetAsSeries(ExtMapBufferUp, true)。
SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 2);
SetIndexBuffer(1, ExtMapBufferDown)。
ArraySetAsSeries(ExtMapBufferDown, true)。
SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 2);
IndicatorShortName("WATR(" + WATR_K + " , " + WATR_M + " )")。
SetIndexLabel(0, "WATR_Up")。
SetIndexLabel(1, "WATR_Dn")。
return(0);
}
//+------------------------------------------------------------------+
//|自定义指标去初始化功能|
//+------------------------------------------------------------------+
int deinit()
{
//----
return(0);
}
//+------------------------------------------------------------------+
//| 自定义指标功能|
//+------------------------------------------------------------------+
bool AntiTrendBar(i)
{
bool res = (TrendUp(i) && (Close[i] < Open[i]) ||
(!TrendUp(i) && (Close[i] > Open[i]) 。
return(res)。
}
//+------------------------------------------------------------------+
//|自定义指标函数||
//+------------------------------------------------------------------+
double CalcIndicValue(int i, bool trend)
{
double res = Close[i];
如果(趋势)
res -= (WATR_K*Point + WATR_M*iATR(NULL, 0, ATR, i))
否则
res += (WATR_K*Point + WATR_M*iATR(NULL, 0, ATR, i))。
return(res)。
}
//+------------------------------------------------------------------+
//| 自定义指标功能|
//+------------------------------------------------------------------+
bool TrendUp(int i)
{
return((Close[i+1] > ExtMapBufferUp[i+1]) &&
(ExtMapBufferUp[i+1] != EMPTY_VALUE))
}
//+------------------------------------------------------------------+
//|自定义指标迭代函数|
//+------------------------------------------------------------------+
int start()
{
int限制。
int counted_bars = IndicatorCounted()。
//----,最后计数的条形图将被重新计算。
//---- 第一个指标值==价格-1点。
//也就是说,它认为趋势是向上的
ExtMapBufferUp[Bars] = Close[Bars] - WATR_K*Point;
// limit = (counted_bars > 0) ?(Bars - counted_bars) : (Bars - 1);
极限=Bars - counted_bars。
//---- 主循环
for(int i = limit; i >= 0; i--)
{
如果(AntiTrendBar(i))
{
ExtMapBufferUp[i] = ExtMapBufferUp[i+1];
ExtMapBufferDown[i] = ExtMapBufferDown[i+1];
}
否则
{
如果(TrendUp(i))
{
ExtMapBufferUp[i] = CalcIndicValue(i, true)。
如果(ExtMapBufferUp[i] < ExtMapBufferUp[i+1])
ExtMapBufferUp[i] = ExtMapBufferUp[i+1];
ExtMapBufferDown[i] = EMPTY_VALUE。
}
否则
{
ExtMapBufferDown[i] = CalcIndicValue(i, false)。
如果(ExtMapBufferDown[i] > ExtMapBufferDown[i+1])
ExtMapBufferDown[i] = ExtMapBufferDown[i+1];
ExtMapBufferUp[i] = EMPTY_VALUE。
}
}
// 越过价格
如果(TrendUp(i) && (Close[i] < ExtMapBufferUp[i])
{
ExtMapBufferDown[i] = CalcIndicValue(i, false)。
ExtMapBufferUp[i] = EMPTY_VALUE。
}
如果((!TrendUp(i))&& (Close[i] > ExtMapBufferDown[i])
{
ExtMapBufferUp[i] = CalcIndicValue(i, true)。
ExtMapBufferDown[i] = EMPTY_VALUE。
}
}
return(0);
}
//+------------------------------------------------------------------+



 
rusmos писал(а)>>

对不起,请你为以下问题写一些代码--第一手,例如0.1,接下来的每一手都增加一定的给定值。

预先感谢你。

搜索这个论坛,这种已经问过和写过的...

在任何情况下,都有类似的东西...

 
StatBars >> :

在这个论坛上搜索一下,有人问过这个问题,也有人写过...

谢谢 >> 我在论坛上打探了大约三个小时,发现了很多,但不是这个。

 
StatBars >> :

搜索这个论坛,以前有人问过,也有人写过......

而代码可能最多只有10个术语。

但我想他们在这里不会去做小事。

 
rusmos >> :

而代码可能最多只有10个术语。

但我想,专业人士在这里不会为小事而去。

如果能将这项任务正式化,不仅仅是大概,而是具体化,以便有人承担这项任务,那就更好了。

 
rusmos писал(а)>>

而代码可能最多是10个术语。

但专业人员可能不会在这里玩弄这些小东西。

请正确表述你的问题。第一单,后续的。第一个是来自什么?从宇宙的开始,或者从基督来的那一天,或者从世界的创造,或者也许从你吃完早餐去散步的那一刻起?问题是什么,答案是什么。

 
rusmos писал(а)>>

而代码可能最多只有10个术语。

但我想他们在这里不会去做这些小事。

extern double RISK=20;


lotsize=MarketInfo(Symbol(),MODE_LOTSIZE)*0.01;
Balance=AccountBalance()*( RISK/100);
lots=NormalizeDouble( Balance/ lotsize,2); // - это и есть лот для открытия позиции
该代码不仅增加了手数,也减少了手数,这一切都取决于库房,库房上升--手数上升......。我想你需要这个...
 
sol >> :

如果能将这项任务正式化,不仅仅是大概,而是具体化,以便有人承担这项任务,那就更好了。

好的。第一批是买入0.1批。作为回应,SellStop被立即设置在距离底部20点的0.2手(即增加0.1)。

此外,如果卖出已经触发,在答案中,我们将Bystop设置为0.3手(即最后一手再增加0.1手),原则上为某某某。

重要的是,地段增加的幅度应该由你来决定调整。

嗯,分别是两个有趣的选择。加法和乘法。

>>唉,我想就是这样了)。

 
StatBars >> :
代码不仅增加了手数,也减少了手数,这一切都取决于库房,库房上升--手数上升......。我想你需要这个...

存款的大小并不重要。