.
请帮助我的代码,当我编译时,它显示我在外面。
//+------------------------------------------------------------------+ //| stock K.mq4 | //| mohsin mewati | //| | //+------------------------------------------------------------------+ #property copyright "mohsin mewati" #property link "" //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- //<snip>...begin of start() //calculate Stochastic Fast %K for (i =ArraySize(MyArray)-StochPeriod-1; i >= 0; i--) { ExtMapBuffer1[i] = CalculateStochOnArray(MyArray,i); } //<snip>...end of start()... } //calculates Stochastics fast %k. takes the array holding our values and current index we are iterating through double CalculateStochOnArray(double TheArray[], int i) { double SmallestBuffer[], //buffer to hold the smallest value LargestBuffer[], //buffer to hold the largest value StochFastK, //Stochastic Fast %K top, //holds top half of calculation bottom; //holds bottom half of calculation int position=0; //place in SmallestBuffer/Largestbuffer for our largest or smallest value ArrayResize(SmallestBuffer, ArraySize(TheArray)); //size our array accordingly ArrayResize(LargestBuffer, ArraySize(TheArray)); position = ArrayMinimum(TheArray, StochPeriod, i); //find the smallest value that starts at index i and is of StochasticPeriod length SmallestBuffer[i] = TheArray[position]; position = ArrayMaximum(TheArray, StochPeriod, i); //find the largest value that starts at index i and is of StochasticPeriod length LargestBuffer[i] = TheArray[position]; top = TheArray[i]-SmallestBuffer[i]; //holds top half of StochFastK calculation bottom = MathMax(0.0001, LargestBuffer[i] - SmallestBuffer[i]); //holds bottom half of StochFastK calculation. Use MathMax to prevent divide by zero errors StochFastK = (top/bottom)*100; return(StochFastK); } //---- return(0); } //+------------------------------------------------------------------+
谢谢你的回答和你给我的宝贵时间,请接受我的道歉,关于我们之前的谈话,我有一点C的知识,我在大学里学的。这不是我的代码,我已经提到了,
主要问题是我做了一个EA,在编译时有11个错误,有一个策略,每次打开买和卖,检查20点收益和关闭订单,现在我只是想使用随机指标 与它。
让我们说,如果随机指标是=>"75 "或<="25",没有订单将打开。
这里是代码。
如果你能帮助我,请转发整个代码并加以更正,谢谢。
//+------------------------------------------------------------------+ //| every tick20.mq4 | //| mohsin mewati | //| | //+------------------------------------------------------------------+ #property copyright "mohsin mewati" #property link "" //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- int order_open_time_buy =0;//intiger to save buy open Time int order_open_time_sell =0;//intiger to save sell open Time bool err_close_all_orders =0;//bolean to save get last error for close all opened orders code bool err_sell=0; bool err_buy=0; bool err_selection_buy=0; bool err_selection_sell=0; bool buy_modified=0; bool sell_modified=0; double mf_buy=0; double mf_sell=0; int buy_trail=0; int err_trail_buy=0; int err_modify_sell=0; int buy_selection=0; bool buy_open_price=0; int sell_selection=0; //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ //---- int start() { bool err_buy; int buy_ticket; bool err_sell; int sell_ticket; bool err_selection_buy; int buy_selection; double buy_open_price; bool err_selection_sell; int sell_selection; bool err_mf_buy; bool srr_mf_sell; bool err_mf_sell; bool err_trail_buy; bool err_modify_sell; bool buy_modified; bool err_trail_sell; bool err_modify_buy; //coding starts while(err_buy=1){//for loop started to execute a buy Order buy_ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask+20*Point,0,Green); //code to execute a buy (buy order placed without SL but with a TP of 20 pips err_buy=GetLastError;//code to check either buy is executed or not? }//for loop end while(err_sell=1){//for loop to place a sell order sell_ticket = OrderSend(Symbol(),OP_SELL,1,Ask,3,Ask-20*Point,0,Red);//code to place a sell ,order placed without SL but with a TP of 20 pips err_sell=GetLastError;//code to check either sell is placed or not? }//for loop ends Alert(); //__________________________________________________________________________________________________________________________________ while(err_selection_buy="true"){// for loop start to selection of first executed order for further procedure buy_selection=OrderSelect("Buy_ticket",SELECT_BY_TICKET);//order select and stored in intiger err_selection_buy=GetLastError;//code to check eithet order is selected or not }//for loop ends buy_open_price=OrderOpenPrice;//taking open price for the first selected order while(err_selection_sell="true"){// for loop start to selection of second executed order for further procedure sell_selection=OrderSelect("Sell_ticket",SELECT_BY_TICKET);//order select and stored in intiger err_selection_sell=GetLastError;//code to check eithet order is selected or not }//for loop ends int sell_open_price=OrderOpenPrice;//taking open price for the second selected order while("buy_trail=1"; "Sell_trail=1"){// while loop started to check if thow of them or one is true while (err_mf_buy="true" && "err_mf_sell="true""){//while loop start to take price quote every time for buy and sell double mf_buy=MarketInfo("GBPUSD",MODE_POINT);//code to store markeet info in integer mf_buy err_mf_buy=GetLastError;//code to confirm the previous line of code executed? double mf_sell=MarketInfo("GBPUSD",MODE_POINT);//code to store markeet info in integer mf_sell err_mf_sell=GetLastError;//code to confirm the previous line of code executed? } if(mf_buy-20=>buy_open_price && "Buy_trail=0"){//if condition to compare if current markeet quote which stored in mf_buy is 20 times greater than the open price of buy Order? while(err_trail_buy="true"){//if above condition true for loop started to start trailing on buy order. OrderModify(buy_ticket,buy_open_price,+20*TrailingStop);//code to start trailig stop on buy for 5 pips since our buy is in 20 pips profit the trail start at 15 pips err_trail_buy=GetLastError;//code to confirm the previous line of code executed? } while(err_modify_sell="true"){//if buy is in profit for 20 pips and trailing stop started on it i want my sell to modify for take profit for just 5 pips. OrderModify("Sell_ticket", double stoploss,Order_Open_Price-5,"ORANGE" )//code to modify sell for tp just for 5 pips err_modify_sell=GetLastError;//code to confirm the previous line of code executed? buy_trail=1;//intiger use to remember that the buy was in profit and all the cooding associated with it was executed there is no need to check . } else if (mf_sell+20<="Sell_open_price" && "Sell_trail=0"){//another logical test to check if buy was not in 20 pips if our sell is in 20 pips profit if so then in the next for loop statrted while(err_trail_sell="true"){//for loop start to modify sell for trail OrderModify(sell_ticket),sell_open_price,-20*TrailingStop,);//code to modify sell for trailing as above mentioned for buy sell is also for 20 pips and if it is in 20 pips profit trailing start on 15 pips err_trail_sell=GetLastError;//code to confirm the previous line of code executed? } while(err_modify_buy="true"){//if our sell is in 20 pips profit and trailing executed on it while loop start to modify buy for tp for just 5 pips OrderModify( buy_ticket, double OrderOpenPrice+5, color arrow_color="blue")//code to modify buy for tp just 5 pips err_modify_buy=GetLastError;//code to confirm the previous line of code executed? sell_trail=1;//intiger use to remember that the sell was in profit and all the cooding associated with it was executed there is no need to check . } } } } //---- return(0); } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); }
每一行的代码都有注释,所以很容易理解代码。
这里是元报价的随机 代码,编译时没有错误
//+------------------------------------------------------------------+ //| Stochastic.mq4 | //| Copyright © 2004, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2004, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" #property indicator_separate_window #property indicator_minimum 0 #property indicator_maximum 100 #property indicator_buffers 2 #property indicator_color1 LightSeaGreen #property indicator_color2 Red //---- input parameters extern int KPeriod=5; extern int DPeriod=3; extern int Slowing=3; //---- buffers double MainBuffer[]; double SignalBuffer[]; double HighesBuffer[]; double LowesBuffer[]; //---- int draw_begin1=0; int draw_begin2=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name; //---- 2 additional buffers are used for counting. IndicatorBuffers(4); SetIndexBuffer(2, HighesBuffer); SetIndexBuffer(3, LowesBuffer); //---- indicator lines SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0, MainBuffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1, SignalBuffer); //---- name for DataWindow and indicator subwindow label short_name="Sto("+KPeriod+","+DPeriod+","+Slowing+")"; IndicatorShortName(short_name); SetIndexLabel(0,short_name); SetIndexLabel(1,"Signal"); //---- draw_begin1=KPeriod+Slowing; draw_begin2=draw_begin1+DPeriod; SetIndexDrawBegin(0,draw_begin1); SetIndexDrawBegin(1,draw_begin2); //---- return(0); } //+------------------------------------------------------------------+ //| Stochastic oscillator | //+------------------------------------------------------------------+ int start() { int i,k; int counted_bars=IndicatorCounted(); double price; //---- if(Bars<=draw_begin2) return(0); //---- initial zero if(counted_bars<1) { for(i=1;i<=draw_begin1;i++) MainBuffer[Bars-i]=0; for(i=1;i<=draw_begin2;i++) SignalBuffer[Bars-i]=0; } //---- minimums counting i=Bars-KPeriod; if(counted_bars>KPeriod) i=Bars-counted_bars-1; while(i>=0) { double min=1000000; k=i+KPeriod-1; while(k>=i) { price=Low[k]; if(min>price) min=price; k--; } LowesBuffer[i]=min; i--; } //---- maximums counting i=Bars-KPeriod; if(counted_bars>KPeriod) i=Bars-counted_bars-1; while(i>=0) { double max=-1000000; k=i+KPeriod-1; while(k>=i) { price=High[k]; if(max<price) max=price; k--; } HighesBuffer[i]=max; i--; } //---- %K line i=Bars-draw_begin1; if(counted_bars>draw_begin1) i=Bars-counted_bars-1; while(i>=0) { double sumlow=0.0; double sumhigh=0.0; for(k=(i+Slowing-1);k>=i;k--) { sumlow+=Close[k]-LowesBuffer[k]; sumhigh+=HighesBuffer[k]-LowesBuffer[k]; } if(sumhigh==0.0) MainBuffer[i]=100.0; else MainBuffer[i]=sumlow/sumhigh*100; i--; } //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; int limit=Bars-counted_bars; //---- signal line is simple movimg average for(i=0; i<limit; i++) SignalBuffer[i]=iMAOnArray(MainBuffer,Bars,DPeriod,0,MODE_SMA,i); //---- return(0); } //+------------------------------------------------------------------+
只需要提取快速K值并存储在名为(My_stockK)的Intiger中。
mohsin360:
请帮助我解决这个问题,当我编译时,它显示了我的代码。
我 在哪里声明?
MyArray 是在哪里声明的?
for (i =ArraySize(MyArray)-StochPeriod-1; i >= 0; i--)
mohsin360:
好吧,那就继续吧。
上述代码是我从MT4指标随机代码中提取的,我只是想在Intiger中提取随机读数,这样我就可以在我的EA中使用它。
mohsin360: 只需要提取快速K值并存储在名为(My_stockK)的Intiger中。
快速K(以及D和慢速)来自于EA,你将它们传递给iStochastic - MQL4文档
好吧,我错了,我把代码贴错了。
我在这里重新粘贴,以便于理解。
//+------------------------------------------------------------------+ //| Stochastic.mq4 | //| Copyright © 2004, MetaQuotes Software Corp. | //| http://www.metaquotes.net/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2004, MetaQuotes Software Corp." #property link "http://www.metaquotes.net/" #property indicator_separate_window #property indicator_minimum 0 #property indicator_maximum 100 #property indicator_buffers 2 #property indicator_color1 LightSeaGreen #property indicator_color2 Red //---- input parameters extern int KPeriod=5; extern int DPeriod=3; extern int Slowing=3; //---- buffers double MainBuffer[]; double SignalBuffer[]; double HighesBuffer[]; double LowesBuffer[]; //---- int draw_begin1=0; int draw_begin2=0; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { string short_name; //---- 2 additional buffers are used for counting. IndicatorBuffers(4); SetIndexBuffer(2, HighesBuffer); SetIndexBuffer(3, LowesBuffer); //---- indicator lines SetIndexStyle(0,DRAW_LINE); SetIndexBuffer(0, MainBuffer); SetIndexStyle(1,DRAW_LINE); SetIndexBuffer(1, SignalBuffer); //---- name for DataWindow and indicator subwindow label short_name="Sto("+KPeriod+","+DPeriod+","+Slowing+")"; IndicatorShortName(short_name); SetIndexLabel(0,short_name); SetIndexLabel(1,"Signal"); //---- draw_begin1=KPeriod+Slowing; draw_begin2=draw_begin1+DPeriod; SetIndexDrawBegin(0,draw_begin1); SetIndexDrawBegin(1,draw_begin2); //---- return(0); } //+------------------------------------------------------------------+ //| Stochastic oscillator | //+------------------------------------------------------------------+ int start() { int i,k; int counted_bars=IndicatorCounted(); double price; //---- if(Bars<=draw_begin2) return(0); //---- initial zero if(counted_bars<1) { for(i=1;i<=draw_begin1;i++) MainBuffer[Bars-i]=0; for(i=1;i<=draw_begin2;i++) SignalBuffer[Bars-i]=0; } //---- minimums counting i=Bars-KPeriod; if(counted_bars>KPeriod) i=Bars-counted_bars-1; while(i>=0) { double min=1000000; k=i+KPeriod-1; while(k>=i) { price=Low[k]; if(min>price) min=price; k--; } LowesBuffer[i]=min; i--; } //---- maximums counting i=Bars-KPeriod; if(counted_bars>KPeriod) i=Bars-counted_bars-1; while(i>=0) { double max=-1000000; k=i+KPeriod-1; while(k>=i) { price=High[k]; if(max<price) max=price; k--; } HighesBuffer[i]=max; i--; } //---- %K line i=Bars-draw_begin1; if(counted_bars>draw_begin1) i=Bars-counted_bars-1; while(i>=0) { double sumlow=0.0; double sumhigh=0.0; for(k=(i+Slowing-1);k>=i;k--) { sumlow+=Close[k]-LowesBuffer[k]; sumhigh+=HighesBuffer[k]-LowesBuffer[k]; } if(sumhigh==0.0) MainBuffer[i]=100.0; else MainBuffer[i]=sumlow/sumhigh*100; i--; } //---- last counted bar will be recounted if(counted_bars>0) counted_bars--; int limit=Bars-counted_bars; //---- signal line is simple movimg average for(i=0; i<limit; i++) SignalBuffer[i]=iMAOnArray(MainBuffer,Bars,DPeriod,0,MODE_SMA,i); //---- return(0); } //+------------------------------------------------------------------+
以下是我想从中提取快速K的代码,在一个Intiger和另一个Intiger中提取D。