void OpenBuyOrder( double StopLoss, double TakeProfit )
{
int Ticket;double SL,TP,SLP,TPP,OPP;
if(HideSL==false && StopLoss>0){SL=Ask-StopLoss*Point;}
else {SL=0;}
if(SL>0 && SL>(Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)){SL=Bid-MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;}
if(HideTP==false && TakeProfit>0){TP=Ask+TakeProfit*Point;}
else {TP=0;}
Ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,SL,TP,EAName,Magic,0,Blue);//-- this stores the value for Ticket, but it never gets used..
//-- you can simply call OrderSend() without storing the result
return; //--- void means the function returns no argument.. thus, no parentheses for return
}
void OpenSellOrder( double StopLoss, double TakeProfit)
{
int Ticket;
double SL,TP,SLP,TPP,OPP;
if(HideSL==false && StopLoss>0){SL=Bid+StopLoss*Point;}
else {SL=0;}
if(SL>0 && SL<(Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point)){SL=Ask+MarketInfo(Symbol(),MODE_STOPLEVEL)*Point;}
if(HideTP==false && TakeProfit>0){TP=Bid-TakeProfit*Point;}
else {TP=0;/*TPP=0;*/}
Ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,SL,TP,EAName,Magic,0,Red);
return;
}
void GetSignal(int MaxBuyOrders, double StopLoss, double TakeProfit) //--- Why make this function a bool??
{
int Op_Buy,Op_Sell,Op_BuyStop,Op_SellStop,Op_BuyLimit,Op_SellLimit;
int total = OrdersTotal();
for(int x=total-1; x>=0; x--)
{
OrderSelect(x, SELECT_BY_POS, MODE_TRADES);
int type = OrderType();
bool result = false; //-- not used anywhere??if (type==OP_BUY) Op_Buy++;
if (type==OP_SELL) Op_Sell++;
if (type==OP_BUYSTOP) Op_BuyStop++;
if (type==OP_SELLSTOP) Op_SellStop++;
}
int limit=1; //--- why define limit to 1
for(int i=1;i<=limit;i++) //--- your for-loop will always run once, in which case why even have a for-loop?
{
double MA1=iMA(NULL,0,100,0,1,0,0);
double MA2=iMA(NULL,0,100,0,1,0,1);
double MA3=iMA(NULL,0,40,0,1,0,0);
double MA4=iMA(NULL,0,40,0,1,0,1);
bool BUY=false; //-- as one guy mentioned better to go with booleans herebool SELL=false;
if(MA1 < MA3 && MA2 > MA4) BUY=true;
if(MA1 > MA3 && MA2 < MA4) SELL=true;
// missed out && total == 0 for nowbool SignalBUY=false;
bool SignalSELL=false;
if(BUY) //-- dont need to write == for bool's ..BUY is same as BUY==true, !BUY same as BUY==falseif(ReverseSystem) SignalSELL=true;
else SignalBUY=true;
if(SELL)
if(ReverseSystem) SignalBUY=true;
else SignalSELL=true;
if (SignalBUY && Op_Buy < MaxBuyOrders ) OpenBuyOrder(StopLoss,TakeProfit); //--- no need to return the return of OpenBuyOrder().. simply calling it will run the code
if (SignalSELL && Op_Sell < MaxSellOrders) OpenSellOrder(StopLoss,TakeProfit);//-- same
}
return;
}
OrderSelect()
if (Buyorder and stoploss < openrice) : we need to trail
if (Sellorder and stoploss > openprice): we need to trail
if (we need to trail):
Modify Stoploss to Currentprice (+ or -) original stoploss
仕事に行く前にひとこと、ブーリアン変数には真偽を表すものがあります。
この本の通りにやっているとはとても思えません。
仕事に行く前にひとこと、ブーリアン変数には真偽を表すものがあります。
この本の通りにやっているとはとても思えません。
私はしようとしている。私は同時にトレード+プログラム+ MQLを学んでいます。
あなたは一人で本を読んで車を運転することを学ぶのですか?
でも、ありがとうございます。
OpenBuyOrder と OpenSellOrder 関数が結果を返さないというエラーが発生します。
私は何を間違えているのでしょうか?
このエラーは、関数 OpenBuyOrder() と OpenSellOrder() が実際には結果を返さない ために発生しています。
以下は、そのコードといくつかのコメントです。
GetSignal関数からすると、実際に引数を返すのではなく、OpenBuy/SellOrder()を使って注文をオープンしたいだけのように見えますね ... GetSignal()関数を少しきれいにして、いくつかコメントをつけてみました。
このエラーは、関数 OpenBuyOrder() と OpenSellOrder() が実際には結果を返さない ために発生しています。
以下は、そのコードといくつかのコメントです。
GetSignal関数から、あなたはOpenBuy/SellOrder()を使って、実際に引数を返すのではなく、単に注文を開きたいようですね ... GetSignal() 関数を少し整理し、コメントを付けました。
それはトンを説明します、どうもありがとうございました、私は今それを試しています。
私は基本的に他のEAからコピーして、それを動作させようとしているので、私自身のコードは少し混乱しています。
他の問題にぶつかったら、遠慮なく質問してください。
トレーリングストップの例をたくさん集めましたが、-ve値から0まですぐにトレールし始め、その後ブレイクイーブンのように停止するものが必要です。
例えば、エントリー価格が100でストップロ スが100の場合、価格が+25まで動くとトレーリングストップは-75まで動き、価格が100に達するとトレーリングストップは0に止まり、それ以上動きません。
誰かこの件で助けてくれませんか?一日中この方法を試しましたが、どうしてもうまくいきません。
私はそれをやったと思ったが、私はやっていない、私のトレーリングストップは0を通って続く。
疑似コードです。
zzuegg
if(Buyorder and stoploss < openprice) : トレールする必要がある。
ストップロスは 常にopenpriceより低く、その逆はないのでしょうか?
私は最終的にMaxLoss関数を使うつもりなので、OrderSendでストップロスを入れることはありません。
もし Op_Buy
if bid <= OpenOrderPrice()+(Trailing Stop value) : trail -- 一度 bid > TSV になると動き続けてはいけないのですか?
そして
もしOp_Sell
if ask >= OpenOrderPrice()-(Trailing stop value): trail ?
そして、Trailingstopより高い値で、Breakevenは仕事を終えることができます?
zzuegg
if(Buyorder and stoploss < openprice) : トレールする必要がある。
ストップロスは常にオープンプライスより低く、その逆は? いいえ、ブレークイーブンの前だけです。
あなたのコードがうまくいくとは思えない。逆をやろうとしているように見える...
いいえ、完全に動作しています。今、そのレスの時と同じかどうか確認 させてください。
これは、動いているトレードの背後で損切りギャップを閉じつつ、息継ぎをさせるという妥協点に限りなく近いものです。これ以前は、BEが起こる前にトレードが60ポイントに達しなければならなかったので、最大でストップアウトしたトレードがたくさんあり、それが私のドローダウンを高くする原因となっていました。