ロボットのこと、どうして動かないのか、誰が助けてくれるの? - ページ 3

 
GIMの場合
注文を出すだけなら、SL / TPの代わりに0を指定します。SLまたはTPが0の場合は、リクエストに0を入力する必要があり、値を入力した場合は、注文が終了する価格を 計算する必要があります。
 
Dmitriy Gizlyk:
GIMの場合
注文を出すだけなら、SL / TPの代わりに0を指定します。そして、今後のために確認しなければならないのは、SLやTPが0であれば、リクエストに0を指定することです。 そして、値を指定した場合は、注文の終値を 計算します。
Expert Advisorで、全取引の合計利益に応じて、注文を開始・終了してほしいのですが・・・。
 
AdikAmir:

extern double Lots=0.1;
extern intnal double FastMAPeriod=5;
extern int FastMAMethod=0; // 0-SMA、1-EMA、2-SMMA、4-LWMA
extern int FastMAPrice=0; // 0-クローズ、1-オープン、2-ハイ、3-ロー、4-メディアン、5-タイピカル、6-ウェイトド
extern int SlowMAPeriod=75;
extern intn SlowMAMethod=3; // 0-SMA, 1-EMA, 2-SMMA, 4-LWMA
extern int SlowMAPrice=3; // 0-Close、1-Open、2-High、3-Low、4-Median、5-Typical、6-Weighted
extern int TP=500; //takeprofit
extern int SL=250; //ストップ・ロス
ダブルチケ

int start(){

double fast_ma1=iMA(NULL,0,FastMAPeriod,0,FastMAMethod,FastMAPrice,1);
double slow_ma1=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,1);
double fast_ma2=iMA(NULL,0,FastMAPeriod,0,FastMAMethod,FastMAPrice,2);
double slow_ma2=iMA(NULL,0,SlowMAPeriod,0,SlowMAMethod,SlowMAPrice,2);

if (注文合計()==0)
{
if (fast_ma1>slow_ma1 && (fast_ma2<slow_ma2))
{ ticet = OrderSend(Symbol(),OP_BUY,0.1,Ask,3,Ask-SL*Point,Ask+TP*Point,NULL,0,0,CLR_NONE)。
if (ticet==0) Print("ERROR");
}
if (slow_ma1>fast_ma1 && (slow_ma2<fast_ma2))
{
ticet = OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Bid-SL*Point,Bid+TP*Point,NULL,0,0,CLR_NONE)。
if (ticet==0) Print("ERROR");
}

}

return(0)です。
}




ログを読むコンパイル時に検出されなかったエラーに関するメッセージが表示されることがあります。

ここでエラーが発生しました OrderSend(Symbol(,OP_SELL,Lots,Bid,3,Bid-SL*Point,Bid+TP*Point,NULL,0,0,CLR_NONE);

を実行する必要があります。 OrderSend(Symbol(),OP_SELL,Lots,Bid,Bid,3,Ask+SL*Point,Bid-TP*Point,NULL,0,0,CLR_NONE) を実行する必要があります。

売りの場合、ストップロスは現在の価格より上、テイクは下であるべきです。 あなたの場合、逆にストップを価格より下に置き、テイクは上にあります。

 
GIM:
Expert Advisorで、全取引の合計利益で注文を開始・終了してほしいのですが・・・。

この場合、ポジションを建てる ときは、SL=0, TP=0とします。

ポジションを閉じるには、各ティックで得られた利益と設定値を比較し、利益が設定値に達したら、OrderClose(...)でループ内のすべての注文を閉じる必要があります。

現在の利益の決定に関しては、設定された課題によって差異が生じる可能性がある。口座の利益を見るのであれば、単純にAccountProfit()を取れば良いのですが、より手間がかかるのはループを通す方法でしょう(そうすれば、必要な注文だけ利益を計算することができます)。

   double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== /* Ваш магик */)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 
Dmitriy Gizlyk:

この場合、ポジションを建てる ときは、SL=0, TP=0とします。

ポジションを閉じるには、各ティックで得られた利益と設定値を比較し、利益が設定値に達したら、OrderClose(...)でループ内のすべての注文を閉じる必要があります。

現在の利益の決定に関しては、設定された課題によって差異が生じる可能性がある。口座ごとの利益を見るなら、単純にAccountProfit()を取ればいいのですが、おそらくより手間のかかる方法はサイクルによるものでしょう(そうすれば、必要な注文だけ利益を計算することができるのです)。

extern double  lots       = 0.01;
extern int  stop_loss      = 0;  
extern int take_profit    = 0;

int            last_bar       = 0;

int start(){
   if (last_bar == Bars) return(0);
   last_bar = Bars;
   if (OrdersTotal() == 0){
          OrderSend(Symbol(), OP_BUY, lots ,Ask, 50, Bid - stop_loss * Point, Ask + take_profit * Point,  "", 1, 0, clrBlue);
          OrderSend(Symbol(), OP_SELL, lots ,Bid, 50, Ask+ stop_loss * Point, Bid - take_profit * Point,  "", 1, 0, clrRed);      
}
   return(0); 
}
 double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== /* Ваш магик */)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 
GIM:
ストップロスとテイクプロフィットが入金通貨 である場合
extern double  lots       = 0.01;
extern int  stop_loss      = 10;  /* Указываем в валюте депозита */
extern int take_profit    = 20;   /* Указываем в валюте депозита */
extern int Magic          = 1;

int            last_bar       = 0;

int start(){
   if (last_bar == Bars) return(0);
   last_bar = Bars;
   if (OrdersTotal() == 0){
          OrderSend(Symbol(), OP_BUY, lots ,Ask, 50, 0, 0,  "", Magic, 0, clrBlue);
          OrderSend(Symbol(), OP_SELL, lots ,Bid, 50, 0, 0,  "", Magic, 0, clrRed);      
}
 double profit=0;
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== Magic)
        {
         profit+=OrderProfit()+OrderSwap()+OrderCommission();
        }
     }
 int requot=0;
 if(profit>=take_profit || (-profit)>=stop_loss)
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderSymbol()==_Symbol && OrderMagicNumber()== Magic)
        {
         if(OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),50,clrRed))
               requot=0;
            else
              {
               requot++;
              }
         if(requot>10)
              {
               i++;
               requot=0;
              }
            i--;
        }
     }
   return(0); 
}
 
Dmitriy Gizlyk:
ストップロス、テイクプロフィットが入金通貨で 指定されている場合

for(int i=0;i<OrdersTotal();i++)

エラー:"i"

 
誰がわかる?
extern int Magic          = 1;


что означает??
 
GIM:
誰が知っている

Expert Advisorの注文の識別子で、自身の注文でのみ動作するようにします。

 
Vladimir Zubov:

Expert Advisorの注文の識別子で、自身の注文でのみ動作するようにします。

自分の命令だけとは...。