nuj >> : Docs and Igor への質問 = "Profit" or "Funds" indicator as continuous line from time (of different ТemptaF) in separate window from time ( meaning - control of portfolio performance in dynamics)...残念ながら、Igorのウェブサイトにインジケータがありますが、それはテーブルと静的な形です...(または多分1がある - 私にリンクを与える)....
そう、ないんです...。なぜなら、そんなフラクタルにどのように番号をつけるか決めかねていたからです。
このようなものがフラクタル形成としてカウントされないとしたらどうでしょう。オプション?
コンバットこの選択肢には賛成できない。実は、1本の棒の上に2つのフラクタルがあると、それはよく知られた図形「レンズ」、時には「ダイヤモンド」と呼ばれる兆候なのである。したがって、この符号によってEAでこの数字を釣り上げることができる。
定義についてはYESですが、ナンバリングについては、それがすべてです......。
Docs and Igor への質問 = "Profit" or "Funds" indicator as continuous line from time (of different ТemptaF) in separate window from time ( meaning - control of portfolio performance in dynamics)...残念ながら、Igorのウェブサイトにインジケータがありますが、それはテーブルと静的な形です...(または多分1がある - 私にリンクを与える)....
フォーラムを探す
というアドバイザーがいるかどうか聞いてみてください。
1.すべてのオープンポジションをピックアップしています。
2.損をしないようにストップを設定する。
3.トロール
4. 3段階のポジションを閉じる。
ロットイコール1。
Exit 1 - ロットの50%が決済されます(例:始値から30ピップス)。
2ウェイアウト - ロットの30%がクローズされ、例えば建値の70ポイントがクローズされます。
3 way out - MA交差点など、ロットの20%がクローズされる。
ありがとうございます。
こんにちは、この簡単なExpert AdvisorにNumberOfBarOpenLastPos関数を実装する方法を教えていただけませんか。
注文が1バーにつき1回トリガーされるように... コードに関数を入れましたが、何も動きません...。
//--------------------------------------------------------------------
// tradingexpert.mq4
//
//--------------------------------------------------------------------
#property copyright"著作権 © 本, 2007"
#プロパティリンク "http://AutoGraf.dp.ua"
//--------------------------------------------------------------- 1 --
// M15の数値
extern double StopLoss =200; // 開いた注文のSL値
extern double TakeProfit =10; // 開いた注文のTP
extern period_MA_1=11; // 周期MA 1
extern int Period_MA_2=31; // ピリオドMA 2.
extern double Rastvor =28.0; // MA間の距離。
extern double Lots =0.1; // 固定ロット数。
extern double Prots =0.07; // フリーファンドのパーセンテージ
bool Work=true; // Expert Advisorが動作する。
string Symb; // 金融商品の名称
//--------------------------------------------------------------- 2 --
int start()
{
イント
Total, // ウィンドウ内の注文数
Tip=-1, // 注文種別選択 (B=0,S=1)
チケット; // 注文番号
二重
MA_1_t, // 値。MA_1現在値
MA_2_t, // MA_2_t の値。MA_2_t 現在値, // MA_2_t 値。
ロット, //現在選択されているオーダーのロット番号
Lts, //オープンオーダーのロット数
Min_Lot, // 最小ロット数
ステップ、 // ロットサイズ変更のステップ
フリー、 // 現在のフリー資金
One_Lot, // 1ロットの値
価格, // 選択された注文の価格
SL, // 選択された注文のSL価格
TP; // 選択された注文のTP
ブール
Ans =false, // クロージングの後のサーバーの回答
Cls_B=false, // 買いを閉じる基準
Cls_S=false, // 売りの終了基準
Opn_B=false, // 開くの基準 Buy
Opn__S=false; // 売りの開始の判断基準
//--------------------------------------------------------------- 3 --
//前処理
if(Bars < Period_MA_2) // 十分なバーがない。
{
Alert("Not enough bars in the window. Expert Advisor is not working.");
return; // start() を終了する。
}
if(Work==false) // 重大なエラーが発生しました。
{
Alert("Critical error. Expert Advisor is not working.");
return; // start() を終了する。
}
//--------------------------------------------------------------- 4 --
// オーダーカウント
Symb=Symbol(); // 金融商品の名前。
Total=0; // 注文数
for(int i=1; i<=OrdersTotal(); i++) // オーダーループ
{
if(OrderSelect(i-1,SELECT_BY_POS)==true) // 以下の場合。
{ // オーダー解析。
if (OrderSymbol()!=Symb)continue; // 当社の金融商品ではありません。
if (OrderType()>1) // 保留注文があります。
{
Alert("未決済注文を検出しました。 Expert Advisorは動作していません。")
return; // Exit()
}
Total++; // 成行注文カウンター
if (Total>1) // 注文が1件以上ない場合
{
Alert("複数の成行注文があり、Expert Advisorが動作していません。")
return; // Exit()
}
Ticket=OrderTicket(); // 注文番号が選択されました。
Tip =OrderType(); // 選択されたオーダーのタイプ。
Price =OrderOpenPrice(); // 選択された注文の価格です。
SL =OrderStopLoss(); // 選択された注文のSL。
TP =OrderTakeProfit(); // 選択された注文のTP。
Lot =OrderLots(); // ロット数
}
}
//--------------------------------------------------------------- 5 --
// 取引条件
MA_1_t=iMA(NULL,0,Period_MA_1,0,MODE_LWMA,PRICE_TYPICAL,0); // MA_1
MA_2_t=iMA(NULL,0,Period_MA_2,0,MODE_LWMA,PRICE_TYPICAL,0); // MA_2
if (MA_1_t > MA_2_t + Rastvor*Point) // MA_1_t と Rastvor*Point の間に差がある場合
{ // ...MA1、2が大きい
Opn_B=true; // 買いの基準を開く
Cls_S=true; // 基準を閉じる販売する
}
if (MA_1_t < MA_2_t - Rastvor*Point) // MA_1_t と Rastvor*Point の間に差がある場合。
{ // ..MA_1と2が大きい
Opn_S=true; //売りの基準を開く
Cls_B=true; //クリック条件購入
}
//--------------------------------------------------------------- 6 --
// 注文を閉じる
while(true) //順番にループを閉じる。
{
if (Tip==0 && Cls_B==true) //買い注文を開く。
{ //終了基準あり
アラート("買物を終了しようとしています",チケット,";)
RefreshRates(); // データをリフレッシュする
Ans=OrderClose(Ticket,Lot,Bid,2);//買いのクローズ
if (Ans==true) // うまくいきました :)
{
アラート(「買い注文終了」,チケット;)
break; // クローズループから抜ける
}
if (Fun_Error(GetLastError())==1) // エラー処理
continue; // 再試行
return; // start() を終了する。
}
if (Tip==1 && Cls_S==true) // 売り注文を開始しました。
{ // 近い基準がある
アラート("売りの終了を試みています",チケット,";)
RefreshRates(); // データをリフレッシュする
Ans=OrderClose(Ticket,Lot,Ask,2);//売りのクローズ
if (Ans==true) // うまくいきました :)
{
アラート(「売り注文が終了しました」,チケット;)
break; // クローズループから抜ける
}
if (Fun_Error(GetLastError())==1) // エラー処理
continue; // 再試行
return; // start() を終了する。
}
break; // 終了する間
}
//--------------------------------------------------------------- 7 --
// 注文の値
RefreshRates(); // データをリフレッシュする
Min_Lot=MarketInfo(Symb,MODE_MINLOT); // 最小ロット数
Free =AccountFreeMargin(); // 資金開放
One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);// 1ロットの値です。
Step =MarketInfo(Symb,MODE_LOTSTEP); // サイズの段階的変更
if (Lots > 0) // ロットが指定されている場合
Lts =Lots; // 私たちは彼らと一緒に仕事をする
else // フリーファンドの割合
Lts=MathFloor(Free*Prots/One_Lot/Step)*Step;// オープニング用
if(Lts < Min_Lot) Lts=Min_Lot; // Min_Lotより小さくないこと; // Min_Lotより小さくないこと
if(Lts*One_Lot > Free) // Freeより高いロットがある。
{
Alert(" Not enough money ", Lts," lots);
return; // start() を終了する。
}
//--------------------------------------------------------------- 8 --
//オープンオーダー
if (NumberOfBarOpenLastPos()>0){。
while(true) // オーダーループを閉じる。
{
if (Total==0 && Opn_B==true) // 未決済注文はありません。
{ //オープンバイヤーの基準です。
RefreshRates(); // データを更新する
SL=Bid - New_Stop(StopLoss)*Point; // SLオープン計算
TP=Bid + New_Stop(TakeProfit)*Point; // TPオープンの計算をします。
Alert("Attempting to open Buy. Waiting for reply...");
チケット=OrderSend(Symb,OP_BUY,Lts,Ask,2,SL,TP);//買いを開始する
if (Ticket > 0) // うまくいった :)
{
アラート(「買い注文が開きました」,チケット;)
return; //オーダーを終了する
}
if (Fun_Error(GetLastError())==1) // エラー処理
continue; // 再試行
return; // start() を終了する。
}
if (Total==0 && Opn_S==true) // 未決済注文はありません。
{ //売り基準を開く。
RefreshRates(); // データを更新する
SL=Ask + New_Stop(StopLoss)*Point; // SLのオープンを計算します。
TP=Ask - New_Stop(TakeProfit)*Point; // TPオープンの計算をします。
Alert("Attempting to open Sell. Waiting for reply...");
チケット=OrderSend(Symb,OP_SELL,Lts,Bid,2,SL,TP);/Open Sel.
if (Ticket > 0) // うまくいきました :)
{
アラート("売り注文が開きました",チケット;)
return; // start() から終了する。
}
if (Fun_Error(GetLastError())==1) // エラー処理
continue; // 再試行
return; // start() を終了する。
}
break; // 終了する間
}
}
//--------------------------------------------------------------- 9 --
return; //exit while; //start()
}
//-------------------------------------------------------------- 10 --
//+----------------------------------------------------------------------------+
//| 作成者 : Kim Igor V. aka KimIV, http://www.kimiv.ru||Google Play!
//+----------------------------------------------------------------------------+
| バージョン:2008年2月19日
//| 説明 : 最後にオープンしたポジションのバー番号または-1を返します。
//+----------------------------------------------------------------------------+
//| パラメータ: |
//| sy - 測定器の名前 ("" または NULL - 現在のシンボル) |.
//| tf - タイムフレーム( 0 - 現在のタイムフレーム) |.
//| op - 操作 ( -1 - 任意の位置) |.
//| mn - マジックナンバー ( -1 - 任意のマジックナンバー) |...
//+----------------------------------------------------------------------------+
intOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {.
datetime t;
int i, k=OrdersTotal();
if (sy==" || sy=="0") sy=Symbol();
for (i=0; i<k; i++) {.
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
if (OrderSymbol()==sy){
if (OrderType()==OP_BUY || OrderType()==OP_SELL) { (オーダータイプ()==OP_BUY)
if (op<0 || OrderType()==op) { }.
if (mn<0 || OrderMagicNumber()==mn) {.
if (t<OrderOpenTime()) t=OrderOpenTime();
}
}
}
}
}
}
return(iBarShift(sy, tf, t, True))
}
int Fun_Error(int Error) // エラー処理関数
{
switch(エラー)
{ // 避けることができるエラー。
case 4: Alert("Trade server is busy. Try again...");
Sleep(3000); // 簡単な解決方法です。
return(1); // 関数を終了します。
case 135:Alert("Price changed. Try again...");
RefreshRates(); // データをリフレッシュします。
return(1); // 関数を終了します。
case 136:Alert("No price. Waiting for new tick...");
while(RefreshRates()==false) // 新しいティックを表示する。
Sleep(1); // ループ内の遅延時間
return(1); // 関数を終了します。
case 137:Alert("Broker is busy. Try again...");
Sleep(3000); // 簡単な解決方法です。
return(1); // 関数を終了します。
case 146:Alert("The trading subsystem is busy. Try again...");
Sleep(500); // 単純な判定
return(1); // 関数を終了します。
// クリティカルエラー
case 2: Alert("一般的なエラー;")
return(0); // 関数を終了します.
case 5: Alert("Older version of the terminal.");
Work=false; // もう動作しない
return(0); // 関数を終了します。
case 64: Alert("アカウントがブロックされました。");
Work=false; // もう動作しない
return(0); // 関数を終了します。
case 133:Alert("取引禁止。");
return(0); // 関数を終了します。
case 134:Alert("Not enough money to execute the transaction")と表示されます。
return(0); // 関数を終了します。
default: Alert("An error has occurred ",Error); // その他のオプション
return(0); // 関数を終了します。
}
}
//-------------------------------------------------------------- 11 --
int New_Stop(int Parametr) // ストップ・ピックをチェックします。
{
int Min_Dist=MarketInfo(Symb,MODE_STOPLEVEL);// 最小距離
if (Parametr<Min_Dist) // 許容値より小さい場合。
{
Parametr=Min_Dist; // 公差を設定する。
Alert("停止距離が伸びました。")
}
return(Parametr); // 返り値。
}
//-------------------------------------------------------------- 12 --
// 受注開始
if (NumberOfBarOpenLastPos()>0)
この関数は,ポジションがオープンされた場合のみ0以上を返し,オープンされない場合は-1が続く...
if (NumberOfBarOpenLastPos()>0||NumberOfBarOpenLastPos()==-1))
{
}
if (NumberOfBarOpenLastPos()>0||NumberOfBarOpenLastPos()==-1) に条件を変更しました。
それでもうまくいきません。もしかしたら、コードのどこかに書く必要があるのでしょうか?