for (int i=OrdersTotal()-1; i >=0; i--) { if (o_order.SelectByIndex(i)) { if (o_order.Symbol() == o_symbol.Name() && o_order.Magic() == MagicNumber) stop_count++; } }
if (!RefreshRates()) を返す。
if(dtriger == 0 ) { CloseAll()。 を返します。 }
// + ----- 最初の注文を開ける ++++++++. if (pos_count == 0 && stop_count == 0 ) { if ( dtriger == -1 && lpos_type != POSITION_TYPE_SELL) { o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // S E L L 11111 }
if ( dtriger == 1 && lpos_type != POSITION_TYPE_BUY ) { o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // B U Y 11111 } }
// + ----- 逆 +++++++++++++++++++++++++ +
if (pos_count>0) { if(lpos_type == POSITION_TYPE_BUY ) { if ( dtriger == -1 ) { o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // S E L L +++++。 } }
if (lpos_type==POSITION_TYPE_SELL ) { if ( dtriger == 1 ) { o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // B U Y +++++. } } }
0〜4要素にdouble、5〜9要素にdatetame、10〜14要素にintを格納する1次元配列を作成したい。mql4で整理することは可能でしょうか? もし可能なら、方法を教えてください。C++で構造体を使った例を見たことがありますが、サイトへのリンクを失念しています?
型ごとに特定の配列セルを割り当てている場合は、配列ではなく構造体を作る。
型ごとに特定の配列セルを割り当てている場合は、配列ではなく構造体を作る。
残念ながら、彼はタスクを正式に決定することもできない。
一方では、彼はC++ / MQLの厳密な型付けから逃れたいようです。これは良い議論スレッドですが、私はそれが彼の助けになるとは思いませんけどhttps://www.mql5.com/ru/forum/294094
この議論の過程で(もう3ヶ月くらい続いているかな)、@Seric29 は関数シグネチャの記述から離れ、任意の数のパラメータを受け取る「幻の」関数を 取得する必要があることが判明しました。
そして、多次元の動的配列がこのすべてに関与していることが議論の過程で判明し、これらの配列はパラメータとして関数に渡される必要があります。
すなわち、これは形式化されていないタスクであり、その解決策は常に「現場からの叫び」で終わる、開発者は何かの機能を減らし、私にループ演算子のソースコードを与え、私はそれらをやり直し、その後、後者です。
mql4の開発者に手紙を書く方法コンパイラのコードを見る方法、もっと機能を追加して静的でないようにする方法はないですか?
...そんなもんだというフレーズは、少なくとも「mind blowing」と言えるでしょう ))))
だから、詳細は明かさないんです。
基本を学ぶことからは逃れられない。
基本を学ぶことからは逃れられない。
男は基本を学ばず、もう全部知っていることを示そうとするのが面白いし、お前 らはメタクソに仕事を邪魔している)
この人は基本的なことを学んでいるのではなく、もう全部知っているということを示そうとしているのが面白いし、君たちは その人が仕事をするのを邪魔しているメタクォートだ)
ごあいさつExpert Advisor Video「MQL4からMQL5へ - Metatrader 5用のEAを書き換える方法」を拝見させていただきました。
著者に感謝します。自分でもやってみようと思いました。自分でもやってみようと思ったんです。考え方は次のとおりです。
1.入力-買いが開くでdtriger = 1としました。
2.dtriger = -1 - Sell opensに設定しました。
3.マルチプラグのdtriger=0を設定したところ、開いているものは全て閉じてしまいました。
FAQにMT5では反対方向のポジションを持つことができないと書いてありましたが、本当ですか?
と持っています。
質問:オープンポジションのクローズを正しく処方するには?
問題は、矢印の開始(反転)で既存のポジションの閉鎖を正しく登録するにはどうすればよいか、ということです。
ありがとうございました。
#include <TradePositionInfo.mqh>.
#include <TradeTrade.mqh>
#include <TradeSymbolInfo.mqh>.
#include <TradeOrderInfo.mqh>
CPositionInfo o_position;
CTrade o_trade;
CSymbolInfo o_symbol;
COrderInfo o_order;
入力 int triger = 0;
input double StartLot = 0.01;
input double lpos_volume = 1.0;
入力 int Step = 10;
input int MagicNumber = 12345; // マジックヌーバー
input int Slippage = 30; // スリッページ
int dtriger;
int dStep
//+------------------------------------------------------------------+
//| エキスパート初期化機能|
//+------------------------------------------------------------------+
int OnInit()
{
dStep = Step ;
dtriger = triger ;
if (!o_symbol.Name(Symbol()))
return(INIT_FAILED);
RefreshRates()。
o_trade.SetExpertMagicNumber(MagicNumber) ;
if (IsFillingTypeAllowed(o_symbol.Name(), SYMBOL_FILLING_FOK))
{
o_trade.SetTypeFilling(ORDER_FILLING_FOK)を実行します。
}
else if (IsFillingTypeAllowed(o_symbol.Name(), SYMBOL_FILLING_IOC))
{
o_trade.SetTypeFilling(ORDER_FILLING_IOC)を実行します。
}
さもなくば
{
o_trade.SetTypeFilling(ORDER_FILLING_RETURN)を実行。
}
o_trade.SetDeviationInPoints(Slippage)を実行します。
if (o_symbol.Digits() == 3 || o_symbol.Digits() == 5 )
{
dStep = 10 ;
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| 専門家による初期化機能|
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| エキスパートティック機能|
//+------------------------------------------------------------------+
void OnTick()
{
時分lpos_time = 0;
double lpos_price_open = 0.0;
ENUM_POSITION_TYPE lpos_type = -1;
イントpos_count = 0;
double sum_profit = 0;
for (int i = PositionTotal() - 1; i>=0; i--)
{
if (o_position.SelectByIndex(i))
{
if (o_position.Symbol() == o_symbol.Name() && o_position.Magic() == MagicNumber)
{
if (o_position.Time() > lpos_time)
{
lpos_time = o_position.Time(); //OrderOpenTime()。
lpos_price_open = o_position.PriceOpen(); //OrderOpenPrice()です。
lpos_type = o_position.PositionType() ; //OrderTipe();
}
pos_count++;
sum_profit = sum_profit + o_position.Commission() + o_position.Swap() + o_position.Profit() ;
}
}
}
// 保留注文の件数を数える
int stop_count=0;
for (int i=OrdersTotal()-1; i >=0; i--)
{
if (o_order.SelectByIndex(i))
{
if (o_order.Symbol() == o_symbol.Name() && o_order.Magic() == MagicNumber)
stop_count++;
}
}
if (!RefreshRates())
を返す。
if(dtriger == 0 )
{
CloseAll()。
を返します。
}
// + ----- 最初の注文を開ける ++++++++.
if (pos_count == 0 && stop_count == 0 )
{
if ( dtriger == -1 && lpos_type != POSITION_TYPE_SELL)
{
o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // S E L L 11111
}
if ( dtriger == 1 && lpos_type != POSITION_TYPE_BUY )
{
o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // B U Y 11111
}
}
// + ----- 逆 +++++++++++++++++++++++++ +
if (pos_count>0)
{
if(lpos_type == POSITION_TYPE_BUY )
{
if ( dtriger == -1 )
{
o_trade.Sell(StartLot * lpos_volume , o_symbol.Name()); // S E L L +++++。
}
}
if (lpos_type==POSITION_TYPE_SELL )
{
if ( dtriger == 1 )
{
o_trade.Buy(StartLot * lpos_volume , o_symbol.Name()); // B U Y +++++.
}
}
}
if(pos_count>0 && stop_count>0)
DeleteStopOrders() ;
}
//-----------------------------------------------------------
ブール RefreshRates()
{
if (!o_symbol.RefreshRates())
return(false) ;
if (o_symbol.Ask() == 0 || o_symbol.Bid() == 0)
return(false)です。
return(true)です。
}
//--- ---------------------------------------------------------
bool IsFillingTypeAllowed (string symbol, int fill_type)
{
int filling = (int)SymbolInfoInteger(symbol, SYMBOL_FILLING_MODE);
return((filling && fill_type) == fill_type) ;
}
// --------------------------------------------------
void CloseAll()
{
for (int index = PositionTotal()-1; index >=0; index--)
{
if (o_position.SelectByIndex(index))
{
if (o_position.Symbol() == o_symbol.Name() && o_position.Magic() == MagicNumber)
{
o_trade.PositionClose(o_position.Ticket())を実行します。
}
}
}
}
//-----------------------------------------------------------
// 保留注文をすべて削除する
//-------------------------------------
void DeleteStopOrders()
{
for (int i = OrdersTotal() - 1; i >= 0; i-- )
{
if (o_order.SelectByIndex(i))
if(o_order.Symbol() == o_symbol.Name() && o_order.Magic() == MagicNumber)
o_trade.OrderDelete(o_order.Ticket())を実行します。
}
}
//+------------------------------------------------------------------+
ごあいさつ...
コードを正しく挿入してください。
コードを正しく挿入してください。
あなたの質問は、少なくともC++の本を読んでください、あなたは専門用語を書き、一見、あなたが特定の質問をしているように見えますが、実際には本質を理解せずに用語で操作するだけです・・・マクロは何を返すのか、どこに返すのか、マクロの本体にはリロード可能な関数があります・・・。ご質問の内容がどのようなものか、説明しきれないほどです。
マクロが何であるかを理解するために、用語を正しく綴り、macroSETTING 、多分それはあなたにとってより簡単に理解することができます。
mql4では、機能やC++が削減され、言い換えれば、あまりにも静的な言語になっています。私のアイデアは失敗したと言えるでしょう、クラスなしで単純なオーバーロードを書き、引数を追加して0を与え、マクロで呼び出そうとしたら、関数が3つあるというエラーが出ました、それで、どれをどのように呼び出すかをまだ記述する必要があると判明しました、後でどんな躓きがあるかは言いません。たぶん、何もしない方が間違いがないと思います。
mql4は機能削減とC++、つまりは静的すぎる言語です。
具体的には何が削られたのでしょうか?
つまり、特にgoogleも知らない「 静的すぎる 言語」、C++は静的型付け言語であり、それを考えることは意味がない、ただそれだけのことなのです。
たぶん、何もしない方が間違いがないと思います。
RTFM ( lurkmore ) を簡単に説明します。
純粋に美意識の問題です。
ここに自前の写真があるようにするには?エムティーフォー