コーディングの方法は? - ページ 132

 

このEAにポジションを追加する

こんにちは。

まず、私は英語が母国語ではないので、謝罪する必要があります。

RSIが67を超えるたびにバーの終わりにポジション(0.1ロットの買い)を追加し、RSIが33未満であるたびに販売するように、私はこのEAをどのように修正することができますか?

例えば

時間終値 RSI

17:31 1.3855 69.3 ---> 0.1買い

17:32 1.3858 70.5 ---> 買い0.1

17:33 1.3849 66.8・・・・・・・・・・・・・・行動せず

17:34 1.3856 68.4 ---> 買い0.1

トータルポジション +0.03

空売りでも同じ。

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

//| このMQLはExpert Advisor Builderで生成されています。

//| メタトレーダー4用Expert Advisor Builder|。

//| |

//|いかなる場合も作者は一切の損害賠償責任を負いません。 |

| ///自己責任でご利用ください。 |

//| |

//+------------------- このヘッダを削除しないでください --------------------+.

#define SIGNAL_NONE 0

#define SIGNAL_BUY 1

#define SIGNAL_SELL 2

#define SIGNAL_CLOSEBUY 3

#define SIGNAL_CLOSESELL 4

#property copyright "Expert Advisor Builder" (エキスパートアドバイザービルダー)

#property link "http://sufx.core.t3-ism.net/ExpertAdvisorBuilder/"

extern int MagicNumber = 0;

extern bool SignalMail = False;

extern bool EachTickMode = False;

extern double Lots = 0.1;

extern int Slippage = 3;

extern bool UseStopLoss = False; extern int Slippage = 3; extern bool UseStopLoss = False;

extern int StopLoss = 30;

extern bool UseTakeProfit = False; extern int StopLoss = 30; extern bool UseTakeProfit = False;

extern int TakeProfit = 60;

extern bool UseTrailingStop = False; extern int TakeProfit = 60; extern bool UseTrailingStop = False;

extern int TrailingStop = 30;

int BarCount;

int Current;

bool TickCheck = False;

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

//| エキスパート初期化関数

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

int init() {

BarCount = Bars;

if (EachTickMode) Current = 0; else Current = 1;

return(0);

}

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

//| エキスパート初期化関数

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

int deinit() {

return(0);

}

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

//| エキスパートスタート機能

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

int start() {

int Order = SIGNAL_NONE;

int Total, Ticket;

double StopLossLevel, TakeProfitLevel;

if (EachTickMode && Bars != BarCount) TickCheck = False;

Total = OrdersTotal();

オーダー = SIGNAL_NONE;

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

//| 変数開始

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

double Buy1_1 = iRSI(NULL, 0, 10, PRICE_CLOSE, Current + 0);

double Buy1_2 = 67;

double Sell1_1 = iRSI(NULL, 0, 10, PRICE_CLOSE, Current + 0);

double Sell1_2 = 33;

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

//| 変数終了

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

//ポジションチェック

bool IsTrade = False;

for (int i = 0; i < トータル; i ++) { { {オーダーセレクト(i, SELECT_BY_PASS)

OrderSelect(i, SELECT_BY_POS, MODE_TRADES);

if(OrderType() <= OP_SELL && OrderSymbol() == Symbol())) { IsTrade = True?

IsTrade = Trueです。

if(OrderType() == OP_BUY){

//Close

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

//| シグナル開始(買い終了)

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

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

//| シグナル終了(買い終了)

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

if (オーダー == SIGNAL_CLOSEBUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)) )){

OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, MediumSeaGreen);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Close Buy")。

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

を続けます。

}

//トレーリングストップ

if(UseTrailingStop && TrailingStop > 0) { /トレイリングストップ

if(ビッド - 注文開始価格() > ポイント * TrailingStop) { {

if(OrderStopLoss() < ビッド - ポイント * トレイリングストップ) { { {

OrderModify(OrderTicket(), OrderOpenPrice(), Bid - Point * TrailingStop, OrderTakeProfit(), 0, MediumSeaGreen)を実行します。

if (!EachTickMode) BarCount = Bars;

を続けます。

}

}

}

} else {

//Close

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

//| シグナル開始(売り終了)

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

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

//| シグナル終了(売り終了)

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

if (オーダー == SIGNAL_CLOSESELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))){

OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, DarkOrange);

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Close Sell").If(EachTickMode):シグナルを送信します。

if (!EachTickMode) BarCount = Bars;

IsTrade = False;

を続けます。

}

//トレーリングストップ

if(UseTrailingStop && TrailingStop > 0) { /トレーリングストップ

if((OrderOpenPrice() - Ask) > (Point * TrailingStop)) { { {

if((OrderStopLoss() > (Ask + Point * TrailingStop))|| (OrderStopLoss() == 0)) { {

OrderModify(OrderTicket(), OrderOpenPrice(), Ask + Point * TrailingStop, OrderTakeProfit(), 0, DarkOrange)を実行します。

if (!EachTickMode) BarCount = Bars;

を続けます。

}

}

}

}

}

}

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

//| Signal Begin(Entry)シグナル

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

if (Buy1_1 > Buy1_2) Order = SIGNAL_BUY;

if (Sell1_1 < Sell1_2) Order = SIGNAL_SELL; if (Sell1_1 < Sell1_2) Order = SIGNAL_SELL;

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

//| シグナル終了

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

//買い

if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)) )){

if(!IsTrade){。

//フリーマージンチェック

if (アカウントフリーマージン() < (1000 * ロット)) {

Print("資金がありません。フリーマージン = ", AccountFreeMargin());

return(0);

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0.です。

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "Buy(#" + MagicNumber + ")", MagicNumber, 0, DodgerBlue)。

if(チケット > 0) {

if (オーダーセレクト(チケット、SELECT_BY_TICKET、MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy")。

} else {

Print("買い注文の開始エラー :", GetLastError());

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

//売り

if (注文 == SIGNAL_SELL && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))。{

if(!IsTrade){。

//フリーマージンチェック

if (アカウントフリーマージン() < (1000 * ロット)) {

Print("資金がありません。フリーマージン = ", AccountFreeMargin());

return(0);

if (UseStopLoss) StopLossLevel = Bid + StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Bid - TakeProfit * Point; else TakeProfitLevel = 0.0.です。

Ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, StopLossLevel, TakeProfitLevel, "Sell(#" + MagicNumber + ")", MagicNumber, 0, DeepPink)。

if(チケット > 0) {

if (オーダーセレクト(チケット, SELECT_BY_TICKET, MODE_TRADES)) {

Print("SELL order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Bid, Digits) + " Open Sell");

} else {

Print("Error opening SELL order :", GetLastError());

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

if (!EachTickMode) BarCount = Bars; return(0) } } if (!EachTickMode) BarCount = Bars;

return(0);

}

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

ありがとうございました。

パヌルゴ

 

当日の利益を確定して取引を停止するには?

こんにちは。

私は問題があります。私はEAをコーディングします。

その日の20PIPの利益が取られたとき、EAは次の日までどんな注文も開いてはいけません。

私を助けてください。

ありがとうございます

fxbeginner

 
fxbeginner:
こんにちは。

問題が発生しました。私はEAをコーディングします。

その日の20のPIPの利益が取られるとき、EAは次の日までどんな注文も開いてはいけません。

私を助けてください。

アイデアは、その日の最初の注文の後に取引を許可しないことでしょう。ordersend()関数の 後に、"trade = false; "を配置します。

そして、新しい日ごとに取引許容量をリセットします。

if(timeprev!=iTime(Symbol(),PERIOD_D1,0)) { //---- これは新しい日です。

timeprev = iTime(Symbol(),PERIOD_D1,0)。

トレード = true; }.

次に、シグナルを確認するとき。

if(trade) { ここにあなたの取引条件 }.

ほんの一例です。

FerruFx

 

注文の非表示

ブローカーの詮索好きな目からすべての買いまたは売りのストップオーダーを 隠すEAをコード化するにはどうすればよいですか?現在のEAには買い逆指値注文と売り逆指値注文が保留されています。

ありがとうございます。

LF

 
LazyForex:
ブローカーの詮索好きな目からすべての買いまたは売りのストップオーダーを隠すEAをコード化するにはどうすればよいですか?現在のEAには買いストップと売りストップの保留中の注文があります。

ありがとうございます。

LF

EAの内部でbuystopとsellstopの値を記録し、価格がbuystopレベルを超えたら、買い注文を送り、sellstopはその逆です。

 
Devil2000:
EA内部でbuystopとsellstopの値を記録し、価格がbuystopレベルを超えたら買い注文を出し、sellstopの場合はその逆をします。

ありがとうございます。PMを送りました。

 

EAに動作を停止するように伝える

皆さん、こんにちは。

7日間の試行錯誤とカット&ペースト、そして何時間もかけて研究した結果、私の最初のEAが完成しそうです...。

どなたか、EAに終了または停止機能を 発行する方法を教えていただけませんか?

私はEAが現在の取引と保留中の取引をすべて削除し、資本が10,000に達した後に終了するようにしたいのです。 以下は、これまでのコードの一部です。

bool StopTrade;

int total = OrdersTotal(), cnt = 0, ExitAtEquity=10000;

for (cnt = total ; cnt >=0 ; cnt-- )

{

OrderSelect(0,SELECT_BY_POS,MODE_TRADES);

if (AccountEquity ()== ExitAtEquity)//(TimeCurrent()- OrderOpenTime() >= ActiveMinutes*60 )

{if(OrderType()==OP_BUY)

OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);

if(OrderType()==OP_SELL)

OrderClose(OrderTicket(),OrderLots(),Ask,3,Red);

if(OrderType()>OP_SELL)

OrderDelete(OrderTicket());

StopTrade=true;}

}

if (dclose==dopen && OrdersTotal() < ConcurrentTrades && StopTrade != true)

ご覧のように、EAはEquityを見てから、StopTrade変数のbool値をtrueに設定します。 その後、EA はコマンドを確認し、StopTrade != true の下では 1 サイクルの間何も処理しませんが、その後 StopTrade の bool 値はリセットされ、取引は継続されると推測されます。

まず、私がやっている方法で、必要なことをさせる方法はありますか?

次に、EAに終了を指示するために使用できる関数はありますか?

すべてのサポートは非常に高く評価されています。

 

このコードのどこが悪いのでしょうか?

なぜ私のEAでこのコマンドでエラーが発生するのか、どなたか教えていただけませんか?

if(OrderSelect(bTicket,SELECT_BY_TICKET)==true)

buyOrder=OrderType();

else

Print("OrderSelect returned the error of ",GetLastError());

bTicket is assigned in this prior line:

bTicket=OrderSend(Symbol(),OP_BUYSTOP,Lots,buyPoint,0,sl,buy_tp,"Script entry",0);

if(bTicket<=0) Print("Error = ",GetLastError());

else Print("ticket = ",bTicket);
My pending order is placed and returns the ticket number as assigned to bTicket, but then bTicket doesn't work in my OrderSelect(). I get an error 0 returned. I tried referencing by SELECT_BY_POS and assigning the returned ticket number to bTicket and it worked fine, but there's no way of knowing what the position number of all of my orders will be just be running the script. Any help is greatly appreciated.
 

投稿を移動しても ダメでした。

同じEAを8つの異なるペアで動かしているので、マジックナンバーを使うことができません。私の元の投稿はどこですか?

 

このコードのどこが問題なのでしょうか?

なぜ私のEAでこのコマンドでエラーが発生するのか、どなたか教えていただけませんか?

if(OrderSelect(bTicket,SELECT_BY_TICKET)==true)

buyOrder=OrderType();

else

Print("OrderSelect returned the error of ",GetLastError());

bTicket is assigned in this prior line:

bTicket=OrderSend(Symbol(),OP_BUYSTOP,Lots,buyPoint,0,sl,buy_tp,"Script entry",0);

if(bTicket<=0) Print("Error = ",GetLastError());

else Print("ticket = ",bTicket);

私の保留中の注文は、bTicket に割り当てられたチケット番号を返しますが、その後、bTicket は私の OrderSelect() で動作しません。 私はエラー0が返されるのを得ます。 SELECT_BY_POSで参照し、返されたチケット番号をbTicketに代入してみるとうまくいきましたが、スクリプトを実行するだけでは、すべての注文のポジション番号を知る方法はありません。どのようなヘルプも非常に感謝しています。