CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

FXの逆指値トラップリピート自動売買のMQL4プログラムを書いてください

2023-03-07 12:58:18 | FX
ChatGPTへの質問
「FXの逆指値トラップリピート自動売買のMQL4プログラムを書いてください」

ChatGPTからの回答
「以下は、MetaTrader 4(MT4)用のMQL4言語で逆指値トラップリピート自動売買を行うプログラムの例です。このプログラムは、逆指値注文を使用してトレーリングストップを設定し、売買回数が制限回数に達するまでリピートしてトレードを続けます。
// 外部パラメーター
extern double TakeProfit = 50; // 利益確定ピップス
extern double StopLoss = 30; // 損切りピップス
extern double TrailingStop = 20; // トレーリングストップピップス
extern int MaxOrders = 5; // 最大取引回数

// グローバル変数
double BuyPrice = 0, SellPrice = 0;
int OrdersCount = 0;

// オンライン処理
void OnTick() {

// 売買回数が最大回数に達したら終了する
if (OrdersCount >= MaxOrders) {
return;
}

// ポジションが無ければ新しい注文を出す
if (PositionsTotal() == 0) {

// 逆指値注文で買いエントリー
double BuyEntry = Ask + StopLoss * Point;
double BuyStopLoss = Bid - StopLoss * Point;
double BuyTakeProfit = Ask + TakeProfit * Point;
int BuyTicket = OrderSend(_Symbol, OP_BUYSTOP, 1.0, BuyEntry, 3, BuyStopLoss, BuyTakeProfit, "Buy Order", 0, 0, Blue);
// 注文が成功したら取引回数を増やす
if (BuyTicket > 0) {
OrdersCount++;
BuyPrice = BuyEntry;
}
}
// ポジションがあればトレーリングストップを更新する
else {
// 買いポジションの場合
if (PositionSelect("Buy") == true) {
// トレーリングストップを更新する
double BuyTrailingStop = BuyPrice + TrailingStop * Point;
bool BuyOrderModified = OrderModify(OrderTicket(), BuyPrice, BuyTrailingStop, BuyTakeProfit, 0, Blue);
// 注文が成功したらトレーリングストップを更新する
if (BuyOrderModified == true) {
BuyPrice = BuyTrailingStop;
}
}
// 売りポジションの場合
else if (PositionSelect("Sell") == true) {
// トレーリングストップを更新する
double SellTrailingStop = SellPrice - TrailingStop * Point;
bool SellOrderModified = OrderModify(OrderTicket(), SellPrice, SellTrailingStop, SellTakeProfit, 0, Red);
// 注文が成功したらトレーリングストップを更新する
if (SellOrderModified == true) {
SellPrice = SellTrailingStop;
}
}

追加の質問
では任意のpipes間隔で多段の逆指値を入れるプログラムは?

追加の回答
「以下は、MT4のMQL4言語を使用して、任意のピップ間隔で多段の逆指値を設定する逆指値トラップリピート自動売買プログラムの例です。このプログラムは、指定されたピップ間隔ごとに、逆指値注文を使用してトレーリングストップを設定します。同じピップ間隔で複数のトレーリングストップを設定するため、 for ループを使用して逆指値注文を生成し、その注文をリストに格納します。」
// 外部パラメーター
extern double TakeProfit = 50; // 利益確定ピップス
extern double StopLoss = 30; // 損切りピップス
extern double TrailingStopInterval = 10; // トレーリングストップピップスの間隔
extern int MaxOrders = 5; // 最大取引回数

// グローバル変数
double BuyPrice = 0, SellPrice = 0;
int OrdersCount = 0;
int TrailingStopCount = 0;
datetime LastTrailingStopTime;

// 注文を格納するリスト
struct OrderData {
int ticket;
double price;
};
OrderData BuyOrders[];
OrderData SellOrders[];

// オンライン処理
void OnTick() {

// 売買回数が最大回数に達したら終了する
if (OrdersCount >= MaxOrders) {
return;
}

// ポジションが無ければ新しい注文を出す
if (PositionsTotal() == 0) {

// 指定されたピップ間隔ごとに逆指値注文を生成する
for (int i=0; i<=TrailingStopCount; i++) {
// 買い注文の場合
double BuyEntry = Ask + (StopLoss + i * TrailingStopInterval) * Point;
double BuyStopLoss = Bid - (StopLoss + i * TrailingStopInterval) * Point;
double BuyTakeProfit = Ask + TakeProfit * Point;
int BuyTicket = OrderSend(_Symbol, OP_BUYSTOP, 1.0, BuyEntry, 3, BuyStopLoss, BuyTakeProfit, "Buy Order", 0, 0, Blue);
// 注文が成功したら取引回数を増やす
if (BuyTicket > 0) {
OrdersCount++;
OrderData newOrder;
newOrder.ticket = BuyTicket;
newOrder.price = BuyEntry;
BuyOrders[ArraySize(BuyOrders)] = newOrder;
}
// 売り注文の場合
double SellEntry = Bid - (StopLoss + i * TrailingStopInterval) * Point;
double SellStopLoss = Ask + (StopLoss + i * TrailingStopInterval) * Point;
double SellTakeProfit = Bid - TakeProfit * Point;
int SellTicket = OrderSend(_Symbol, OP_SELLSTOP, 1.0, SellEntry,


最新の画像もっと見る