如何解决当指标缓冲区不再提供值时,如何保持字符串值相同?
我编写了一个基本的EA交易,以在参数为真时触发交易。但是,在这种情况下,代码将永远无法满足所有要求,因为当指示符缓冲区不提供值时,字符串值不提供值。
我需要帮助的是,在条形图通过箭头指示符之后,使指示符缓冲区触发的saisignal
的字符串值保持不变,以便其他信号最终指示交易时,它可以触发交易。
double closeAllTradesThisPair()
{
for (int i=OrdersTotal();i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TradES);
if(OrderSymbol()==Symbol())
{
OrderClose(OrderTicket(),OrderLots(),MarketInfo(OrderSymbol(),MODE_BID),3,clrNONE);
}
}
}
void OnTick()
{
double saiup = iCustom( Symbol(),PERIOD_H1,"super-arrow-indicator",0 );
double saidn = iCustom( Symbol(),1,0 );
double osma1 = iOsMA( Symbol(),12,26,9,PRICE_OPEN,1 );
double osma0 = iOsMA( Symbol(),0 );
double stup = iCustom( Symbol(),"super-trend",0 );
double stdn = iCustom( Symbol(),0 );
double sar = iSAR( Symbol(),0.02,0.2,0 );
double ma = iMA( Symbol(),20,MODE_SMA,PRICE_CLOSE,0 );
string saisignal = "";
string osmasignal = "";
string stsignal = "";
string sarsignal = "";
string masignal = "";
if(saiup < 1000)
{
saisignal = "123";
}
if(saidn < 1000)
{
saisignal = "321";
}
if(osma1 < osma0)
{
osmasignal = "123";
}
if(osma1 > osma0)
{
osmasignal = "321";
}
if(stup < 1000)
{
stsignal = "123";
}
if(stdn < 1000)
{
stsignal = "321";
}
if(sar < Bid)
{
sarsignal = "123";
}
if(sar > Bid)
{
sarsignal = "321";
}
if(ma < Bid)
{
masignal = "123";
}
if(ma > Bid)
{
masignal = "321";
}
for(int b=OrdersTotal()-1;b>=0;b--)
{
if(OrderSelect(b,MODE_TradES))
{
if(OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY)
{
if(OrderStopLoss() < Ask - (150*_Point))
{
OrderModify(OrderTicket(),OrderOpenPrice(),Ask-(150*_Point),OrderTakeProfit(),CLR_NONE);
}
}
if(OrderType()==OP_SELL)
{
if(OrderStopLoss() > Bid + (150*_Point))
{
OrderModify(OrderTicket(),Bid+(150*_Point),CLR_NONE);
}
}
}
}
}
if(saisignal == "123")
{
if(osmasignal == "123")
{
if(stsignal == "123")
{
if(sarsignal == "123")
{
if(masignal == "123")
{
double buyticket = OrderSend(Symbol(),OP_BUY,0.01,Ask,Ask-150*_Point,NULL,CLR_NONE);
}
}
}
}
}
if(saisignal == "321")
{
if(osmasignal == "321")
{
if(stsignal == "321")
{
if(sarsignal == "321")
{
if(masignal == "321")
{
double sellticket = OrderSend(Symbol(),OP_SELL,Bid+150*_Point,CLR_NONE);
}
}
}
}
}
Comment(" sai: ",saisignal," osma: ",osmasignal," st: ",stsignal," sar: ",sarsignal," ma: ",masignal);
}
解决方法
Q :“如何保持字符串值相同...?”
此问题有一个原因,并且有一对可用的解决方案步骤:
每个条目的account_manager
代码都按原样创建空字符串。无论如何都必须更换它。
但是随后我们必须以某种方式声明这些字符串。
一个选项
是
,它仍然允许它们在with ad as (
select row_number() over (order by code) as seqnum,replace(rtrim(replace(code,'0',' ')),' ','0') as new_code
from anc_documents
),cte as (
select seqnum,new_code,0 as offset,0 as lev
from ad
union all
select seqnum,stuff(new_code,offset + 3,'-'),lev + 1
from cte
where offset + 3 < len(new_code)
)
select *
from (select max(lev) over (partition by seqnum) as max_lev,cte.*
from cte
) cte
where max_lev = lev;
代码块的“作用域”(OnTick(){...}
)中声明,但将它们声明为 {...}
OnTick(){...}
,因为在这种情况下,static
使编译器将这样声明的变量的实际值保留为一个{{ 1}}每次都调用另一个(因此永远不要重新声明和存储初始化值(此处为空string saisignal = ""; // STATIC modifier is key here
)。
static
第二选项
是
,用于将此类变量声明移至“顶级”范围(用于全局可见的变量),这使编译器将永久性存储器位置保留给存储和访问任何此类“全局声明/可见”变量。
OnTick(){...}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。