关于MQL 4的程序员问题和答案 - 页 4

 

到目前为止,就像这样。

//+------------------------------------------------------------------+

//| Fibo trading.mq4|

//| Minodi |

//| minodi@yandex.ru |

//+------------------------------------------------------------------+

#财产版权"Minodi"

#属性链接 "minodi@yandex.ru"


外来的int period_EMA = 233,

period_SMA = 233,

止损=30。

外来的双数Lot = 0.01。

外部字符串 SesEnd ="22:00"; //海或低的边界时间

//+------------------------------------------------------------------+

//| 脚本程序启动功能|

//+------------------------------------------------------------------+

int start()

{

//------- 每日价格、斐波和高低点渲染时间--------------+

int shift = iBarShift(NULL,1440,Time[0]) + 1;

double HiPrice = iHigh(NULL,1440,shift); //高价。

double LoPrice = iLow(NULL,1440,shift); //低价格

double OpPrice = iOpen (NULL,1440,shift); //open price

double ClPrice = iClose (NULL,1440,shift); // 收盘价

datetime StTime = iTime(NULL,1440,shift); // ?

如果(TimeDayOfWeek(StTime)==0/*Sunday*/)

{/Add fridays high and low

HiPrice = MathMax(HiPrice,iHigh(NULL,1440,shift+1))。

LoPrice = MathMin(LoPrice,iLow(NULL,1440,shift+1))。

OpPrice = iOpen(NULL,1440,shift+1);

ClPrice = iClose (NULL,1440,shift+1);

}

double Pivot =(HiPrice+LoPrice+ClPrice)/3;

double Range =HiPric-LoPrice;

double Fibo138 =1.382*Range+LoPrice;

double Fibo162 =1.618*Range+LoPrice;

double Fibo_138 =LoPric-(1.382*Range-Range);

double Fibo_162 =LoPric-(1.618*Range-Range);

//---------------- HiTime和Low-----------------------------------------+

int HiTime,LoTime。

int time; // 在下一个条形图上滚动这些数值。


if (time! =Time[0]){HiTime=0;LoTime=0;time=Time[0];}

如果(High[0]>HiPrice)HiTime=TimeCurrent()。

如果(Low[0]<LoPrice)LoTime=TimeCurrent()。


Comment("On this bar: "+"\n Time High Point="+HiTime+"\n Time Low Point="+LoTime);

//-----------------Ценовой диапазон Демарка-------------------------------+

int currDay, i=0; //

如果(currDay!=TimeDay(Time[i]))

{

如果(ClPrice<OpPrice) double x=(HiPrice + LoPrice + LoPrice)/2;

如果(ClPrice>OpPrice)x=(HiPrice+LoPrice+ClPrice+HiPrice)/2。

如果(ClPrice==OpPrice)x=(HiPrice+LoPrice+ClPrice+ClPrice)/2。

i++;

}

double MaxDay = x - LoPrice; // Demark价格范围

double MinDay = x - HiPrice; // Demark价格范围

// -----------Скользящие средние---------------------------------------------+

double EMA = iMA(15,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0);

double SMA = iMA(15,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0)。

double EMA1 = iMA(60,0,period_EMA,0,MODE_EMA,PRICE_CLOSE,0);

double SMA1 = iMA(60,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);

//----------------Удаление вчерашних ордеров---------------------------------+

//------------------Ордера----------------------------------------------------+

 

亲爱的论坛成员,请查看代码,我计划逐步增加

 

这些是我给你的参数,在你开始之前放置它们


int HiTime,LoTime;

int time; // на следующем баре обнкляем значения

 
你好,亲爱的程序员们!如果可能的话,你能建议一个新手如何编写一个脚本(不是专家顾问),在下交易订单的同时,启用最低水平的追踪止损。也许有一个现成的,那么如果你能给我一个链接。
 
Vladon >>:

Вот эти параметры ято я давал, поместите перд стартом


int HiTime,LoTime;

int time; // на следующем баре обнкляем значения


动议。其他方面都还好吗?
 

亲爱的论坛成员,请注意并告诉我们犯了什么错误。

//+------------------------------------------------------------------+

//| Fibo trading.mq4|

//| Minodi |

//| minodi@yandex.ru |

//+------------------------------------------------------------------+

#财产版权"Minodi"

#属性链接 "minodi@yandex.ru"


外来的int period_EMA = 233,

period_SMA = 233,

止损=30。

魔力=55。

外来的双数Lot = 0.01。

外部字符串 SesEnd ="22:00"; //海或低的边界时间


int HiTime,LoTime。

int time; // 在下一个条形图上滚动数值


//+------------------------------------------------------------------+

//| 脚本程序启动功能|

//+------------------------------------------------------------------+

int start()

{

//------- 每日价格、斐波和高低点渲染时间--------------+

int shift = iBarShift(NULL,1440,Time[0]) + 1;

double HiPrice = iHigh(NULL,1440,shift); //高价。

double LoPrice = iLow(NULL,1440,shift); //低价格

double OpPrice = iOpen (NULL,1440,shift); //open price

double ClPrice = iClose (NULL,1440,shift); // 收盘价

datetime StTime = iTime(NULL,1440,shift); // ?

如果(TimeDayOfWeek(StTime)==0/*Sunday*/)

{/Add fridays high and low

HiPrice = MathMax(HiPrice,iHigh(NULL,1440,shift+1))。

LoPrice = MathMin(LoPrice,iLow(NULL,1440,shift+1))。

OpPrice = iOpen(NULL,1440,shift+1);

ClPrice = iClose (NULL,1440,shift+1);

}

double Pivot =(HiPrice+LoPrice+ClPrice)/3;

double Range =HiPric-LoPrice;

double Fibo138 =1.382*Range;

double Fibo162 =1.618*Range;

double Fibo_138 =(LoPrice-1.382*Range)-Range;

double Fibo_162 =(LoPrice-1.618*Range)-Range;

//---------------- time hai and low-----------------------------------------+


if (time! =Time[0]){HiTime=0;LoTime=0;time=Time[0];}

如果(High[0]>HiPrice)HiTime=TimeCurrent()。

如果(Low[0]<LoPrice)LoTime=TimeCurrent()。


Comment("On this bar: "+"\n Time High Point="+HiTime+"\n Time Low Point="+LoTime);

//-----------------Ценовой диапазон Демарка-------------------------------+

int currDay, i=0; //

如果(currDay!=TimeDay(Time[i]))

{

如果(ClPrice<OpPrice) double x=(HiPrice + LoPrice + LoPrice)/2;

如果(ClPrice>OpPrice)x=(HiPrice+LoPrice+ClPrice+HiPrice)/2。

如果(ClPrice==OpPrice)x=(HiPrice+LoPrice+ClPrice+ClPrice)/2。

i++;

}

double MaxDay = x - LoPrice; // Demark价格范围

double MinDay = x - HiPrice; // Demark价格范围

// -----------Скользящие средние---------------------------------------------+

double EMA = iMA(15,0,period_EMA,0,MODE_EMA, PRICE_CLOSE,0);

double SMA = iMA(15,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0)。

double EMA1 = iMA(60,0,period_EMA,0,MODE_EMA,PRICE_CLOSE,0);

double SMA1 = iMA(60,0,period_SMA,0,MODE_SMA,PRICE_CLOSE,0);

//------------------Ордера----------------------------------------------------+

如果(HiTime>LoTime){

int ticket1 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,HiPrice,0,0,Pivot,NULL,Magic,58000,Red) 。

int ticket2 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,HiPrice,0,0,LoPrice,NULL,Magic,58000,Red) 。

int ticket3 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo138,0,0,HiPrice,NULL,Magic,58000,Red) 。

int ticket4 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo138,0,0,LoPrice,NULL,Magic,58000,Red) 。

int ticket5 =OrderSend(Symbol(),OP_SELLLIMIT,Lot,Fibo162,0,0,HiPrice,NULL,Magic,58000,Red) 。

int ticket6 =OrderSend(Symbol(,OP_SELLLIMIT,Lot,Fibo162,0,0,Pivot,NULL,Magic,58000,Red);

}

如果(HiTime<LoTime){

int ticket7=OrderSend(Symbol(),OP_BUYLIMIT,Lot,LoPrice,0,0,Pivot,NULL,Magic,58000,Red) 。

int ticket8=OrderSend(Symbol(),OP_BUYLIMIT,Lot,LoPrice,0,0,HiPrice,NULL,Magic,58000,Red) 。

int ticket9=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_138,0,0,LoPrice,NULL,Magic,58000,Red) 。

int ticket10=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_138,0,0,Pivot,NULL,Magic,58000,Red) 。

int ticket11=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_162,0,0,LoPrice,NULL,Magic,58000,Red) 。

int ticket12=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Fibo_162,0,0,Pivot,NULL,Magic,58000,Red) 。

}

如果(HiTime>LoTime && ClPrice>Pivot) {

int ticket13=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Pivot,0,0,HiPrice,NULL,Magic,58000,Red) 。

int ticket14=OrderSend(Symbol(),OP_BUYLIMIT,Lot,Pivot,0,0,Fibo138,NULL,Magic,58000,Red) 。

}

如果(HiTime<LoTime && ClPrice<Pivot)

int ticket15=OrderSend(Symbol(),OP_SELLLIMIT,Lot,Pivot,0,0,LoPrice,NULL,Magic,58000,Red) 。

int ticket16=OrderSend(Symbol(),OP_SELLLIMIT,Lot,Pivot,0,0,Fibo_138,NULL,Magic,58000,Red) 。

}

return(0);


//+------------------------------------------------------------------+


 

乍一看,这些参数。

int currDay;


用于启动

 
忘记了止损,把它们放在30P的位置上
 
指出错误,我希望代码能够正常工作
 

论坛的先生们,帮助了解....

以下是部分代码(主要代码取自专家顾问的构建手册)。

// 订单功能
//全局变量:
// Mas_Ord_New[31][9] // 最近已知的订单数组
// Mas_Ord_Old[31][9] // 以前(旧)的订单数组
// 第一索引 = 订单号码
// [][0] 没有定义
// [][1] 开仓订单价格(abs.
// [][2] StopLoss of the order (abs. rate)
// [][3] TakeProfit of the order (abs. rate)
// [][4] number of the order
// [][5] number of lots of the order.(Abc比率)
// [][6] 订单类型0=B,1=S,2=BL,3=SL,4=BS,5=SS
// [][7] 订单的神奇数字
// [][8] 0/1

如果(Mas_Ord_Old[old][6]==0 && Bid>Mas_Ord_Old[old][2] && Bid<Mas_Ord_Old[old][3])。
Inform(1, Mas_Ord_Old[old][4]); // 所以买入订单被计数器信号关闭
else if (Mas_Ord_Old[old][6]==0 && Bid<=Mas_Ord_Old[old][2])
Inform(19,Mas_Ord_Old[old][4], Mas_Ord_Old[old][2])//
else if (Mas_Ord_Old[old][6]==0 && Bid>=Mas_Ord_Old[old][3])
Inform(20,Mas_Ord_Old[old][4],Mas_Ord_Old[old][3]//

else if (Mas_Ord_Old[old][6]==1 && Ask<Mas_Ord_Old[old][2] && Ask>Mas_Ord_Old[old][3] )
Inform(2, Mas_Ord_Old[old][4]); // 所以卖单被计数器信号关闭
else if (Mas_Ord_Old[old][6]==1 && Ask>=Mas_Ord_Old[old][2])
Inform(19,Mas_Ord_Old[old][4], Mas_Ord_Old[old][2))//这意味着SL已经触发
else if (Mas_Ord_Old[old][6]==1 && Ask<=Mas_Ord_Old[old][3])
Inform(20,Mas_Ord_Old[old][4],Mas_Ord_Old[old][3]); //TA触发了

其余的就没有兴趣了...

问题:在90%的情况下显示正确的参数,即如果SL被触发,参数是 "19",如果TP是 "20",如果订单被手动关闭,或被一个计数器信号关闭,参数是 "1 "或 "2"。它是这样设计的。

但有时(相当频繁),它没有返回 "20",而是返回 "19"(反之亦然),甚至是 "1"("2")。请帮助我正确描述 "如果 "功能:作为订单关闭原因的条件。

我想原因可能是在价格的四舍五入方面?