int Tip;// Тип ордераint Ticket=0,// Номер ордера
Tkt;// Количество номеров ордеровdouble Lot=0,// Количество закр. лотов
Lts;// Количество лотов всегоdouble Price_Cls;// Цена закрытия ордераint Errors;//--------------------------------------------------------------- 3 --for(int mm=1; mm<= Mas_Ord_Tek[0][0]; mm++)// Цикл по живым ордерам{if( Mas_Ord_Tek[ mm][6]== Tip &&// Среди ордеров нашего типа
Mas_Ord_Tek[ mm][5]> Lot &&// .. выбираем лоты
Mas_Ord_Tek[ mm][4]> Ticket)// .. выбираем номер ордера{// Этот больше ранее найден.
Lts= Mas_Ord_Tek[ mm][5]+ Lot;
Tkt= Mas_Ord_Tek[ mm][4]+ Ticket;}}if( Tip==0) Price_Cls=Bid;// Для ордеров Buyif( Tip==1) Price_Cls=Ask;// Для ордеров Sellif( BuyOrdProf>100&& Lts>0)
Ans=OrderClose( Tkt, Lts, Price_Cls,0,Red);// Закрыть все ордера
また、注文数の条件では、ロットが1以上(Lts>1)の場合、ロットはクローズされません。
int Tip;// Тип ордераint Ticket=0,// Номер ордера
Tkt;// Количество номеров ордеровdouble Lot=0,// Количество закр. лотов
Lts;// Количество лотов всегоdouble Price_Cls;// Цена закрытия ордераint Errors;//--------------------------------------------------------------- 3 --for(int mm=1; mm<= Mas_Ord_Tek[0][0]; mm++)// Цикл по живым ордерам{if( Mas_Ord_Tek[ mm][6]== Tip &&// Среди ордеров нашего типа
Mas_Ord_Tek[ mm][5]> Lot &&// .. выбираем лоты
Mas_Ord_Tek[ mm][4]> Ticket)// .. выбираем номер ордера{// Этот больше ранее найден.
Lts= Mas_Ord_Tek[ mm][5]+ Lot;
Tkt= Mas_Ord_Tek[ mm][4]+ Ticket;}}if( Tip==0) Price_Cls=Bid;// Для ордеров Buyif( Tip==1) Price_Cls=Ask;// Для ордеров Sellif( BuyOrdProf>100&& Lts>1)
Ans=OrderClose( Tkt, Lts, Price_Cls,0,Red);// Закрыть все ордера
//+----------------------------------------------------------------------------+//| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru |//+----------------------------------------------------------------------------+//| Версия : 19.02.2008 |//| Описание : Возвращает суммарный профит открытых позиций в валюте депозита |//+----------------------------------------------------------------------------+//| Параметры: |//| sy - наименование инструмента ("" - любой символ, |//| NULL - текущий символ) |//| op - операция (-1 - любая позиция) |//| mn - MagicNumber (-1 - любой магик) |//+----------------------------------------------------------------------------+double GetProfitOpenPosInCurrency(string sy="",int op=-1,int mn=-1){double p=0;int i, k=OrdersTotal();if( sy=="0") sy=Symbol();for( i=0; i< k; i++){if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES)){if((OrderSymbol()== sy || sy=="")&&( op<0||OrderType()== op)){if(OrderType()==OP_BUY||OrderType()==OP_SELL){if( mn<0||OrderMagicNumber()== mn){
p+=OrderProfit()+OrderCommission()+OrderSwap();}}}}}return( p);}
kombat 2009年07月17日 22:13
合計すると、買い夏3ロットを取得し、このボリュームに対抗する3ロットを販売する
オプションとして、はい。ただし、すでに売りの注文がある場合は、EAが必要な注文を閉じないことがあります。解決するはずです。
kombat 2009.07.17 22:13.
しかし、ご質問にお答えすると、すべてのポジションをクローズすることは可能なのでしょうか?
そうですね、ひとつひとつ、クイックスクリプト、aap!で終わりですから......。
それが、今使っているものです。スクリプトのセット - これを使い、あれを使う...。しかし、Expert Advisorに自分のストラテジーをコード化しようとしたところ、いくつもの難題にぶつかりました。
私はここで動作しないものを持っている、それはそれはエラーなしを閉じないことを意味します。
ClosePositions()関数では、そのb-Positions.mqhライブラリ、KimIVはテスターでeeの使用を禁止するその他のClosePosBySelect()関数への呼び出しを使用しています 。
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
ヒストリーテストには、彼のライブラリb-ForTest.mqhを 使用します。
ClosePositions()関数では、そのb-Positions.mqhライブラリ、KimIVはテスターでeeの使用を禁止するその他の関数ClosePosBySelect()への呼び出しを使用しています。
if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
歴史テストには、彼のライブラリb-ForTest.mqhを 使用します。
あなたは私のコードを誤解している...ロシア語への翻訳...NOTテストモードかつ(EAが取引不可またはExpert Advisorが停止している)場合、ループを中断する。簡単に言うと、ツールバーの「Expert Advisors」ボタンを押したときに、この行でループから抜けるようになっています。
こんばんは。
残念ながら、配列にも矛盾があります...ロットが0より大きい場合(Lts>0)という条件でオーダーカウントした場合、ロットは1つずつ(利益が出た時点で)決済されますが、トータルの利益は考慮されるはずです。
また、注文数の条件では、ロットが1以上(Lts>1)の場合、ロットはクローズされません。
このエラーが表示される方を教えてください。
それとも、Igorさん、私があなたの機能の使い方を誤解しているのでしょうか?
BuyOrdProf=GetProfitOpenBuyPosInCurrency(OP_BUY); //関数を コールする。
Igorさん、PriceOpenLastPos関数をインジケータに挿入する方法を教えてください。
コンパイル時に、最初のブラケットとそれに続く変数でエディタがエラーを出します。
double PriceOpenLastPos( string sy="", int op=-1, int mn=-1) {
datetime t;
double r=0;
int k=OrdersTotal();
if (sy=="0") sy=Symbol();
for (i=0; i<k; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if (OrderSymbol()==sy || sy=="){
if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
if (op<0 || OrderType()==op) {
if (mn<0 || OrderMagicNumber()==mn) {
if (t<OrderOpenTime()){
t=OrderOpenTime();
r=OrderOpenPrice();
}.
}
}
}
}
}
}
return(r);
}.
}
'(' - 関数定義 unexpected D:\MT4﹑️ (627, 24)
'sy' - variable not defined D:\MT4﹑️ D:\MT4﹑️ (632, 7)
etc.
売買シグナル形成のロジックをインジケータに実装し、生成されたシグナルをグローバル変数 経由でExpert Advisorに送り、注文をオープン/クローズさせる。
何か判断するために注文の建値が必要なので、それをやろうとしています。私のインジケータは動的なもので、テスターのデモモードまたはビジュアライゼーションモードでのみデバッグが可能です。
トータルの利益ではなく、個々の注文の利益が考慮されるという図式です。
BuyOrdProf=GetProfitOpenBuyPosInCurrency(OP_BUY); //関数呼び出し
関数に渡すパラメータが正しくない。こんな感じでいいんじゃないでしょうか。
関数に渡すパラメータが正しくない。こんな感じでいいんじゃないでしょうか。
関数呼び出しのシンボルにバインディングを追加しても、解決しない。なぜ、各ポジションの利益を別々にカウントするのですか(上の写真)?