[ARCHIVE!] フォーラムを散らかさないように、どんなルーキーの質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしではどこにも行けない - 4. - ページ 217

 
DanLett:

もしもの時のためにアドバイスをお願いします。

テスターでは問題なく、すべて計画通りに動作していますが、realskではトランザクションを開くことができません。

追伸:本当に困っています、生きるか死ぬかの問題です。


私は専門家ではないので、もしかしたら問題があるかもしれません。

ОrderSelect(i,SELECT_BY_POS,MODE_TRADES)
は、MODE_TRADESに置き換わりました。
 

私の数学はどうなっているんだ?

int modOrder()
{
double currentPrice = Bid;
double currentStoploss = OrderStopLoss();
double profitLine=profitLine();
if (currentPrice >= profitLine)
  {
  OrderModify(getTicket(),0,currentStoploss+1*Point,0,0,Blue);
  }
  Alert("profit line ", profitLine);
  return (0);
}

私のcurrentPrice >= profitLineは、if profitLine == or >という意味ですよね?

でも、少なくとも1点差で>なら、私には有効です。

 
実数(double)を厳密な等号で比較することは、実数で行うべきことではありません。その差は最大許容値で比較するのがより正しい。
 
olis: 私の数学はどうなっているんだ?
FAQは ご覧になりましたか
 
GaryKa:
FAQは ご覧になりましたか

ええ、まあ...は思いつかなかった。ありがとうございます(苦笑)。
 
Gek34:

専門家の皆様、インジケータに関する質問が削除されました、解決策は全く予期せず、計算を重複して行い、おっと・・・となりました。すべてがうまくいっている。

しかし、もうひとつ、どのように機能したのか、理解したいものがあります。そのコードを添付します。

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Yellow

extern int PerMa = 5;
extern int Shift = 0;
extern int Step = 15;

double ABuf45[],ABuf[],ABuf5[],ABuf15[];//,Stark[];
double Stark;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{ Stark=0;
//---- indicators
// IndicatorBuffers(4);

SetIndexBuffer(0,ABuf);
SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,2);

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
int i,n;

//----
i=Bars-counted_bars-1;

while(i>=0)
{ RefreshRates();
//----
double Ma15=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE,i);
double Ma45=iMA(NULL,0,50,0,MODE_EMA,PRICE_CLOSE,i);
double Ma=iMA(NULL,0,PerMa,0,MODE_EMA,PRICE_CLOSE,i);
//double Ma1=iMA(NULL,0,PerMa,Shift,MODE_EMA,PRICE_CLOSE,i+1);
if(Ma>Stark+Step*Point&&Ma15>Ma45){Stark=Ma;}
if(Ma<Stark-Step*Point&&Ma15<Ma45){Stark=Ma;}//else{Stark=Stark;}
ABuf[i+Shift]=Stark;Comment(Stark);
if(Ma>Stark+Step*Point&&Ma15>Ma45){Stark=Ma;}//else{Stark=Stark;}
if(Ma<Stark-Step*Point&&Ma15<Ma45){Stark=Ma;}//else{Stark=Stark;}
ABuf[i+Shift]=Stark;//Comment(Stark);

//----
i--;
}
return(0);
}


撤退した。くだらないものを作りまくった。もっと単純なことがわかった。Start関数からStark変数を取り出して、tick毎に リセットされないようにしました。
 

sig1 "シグナルが出さ れると 買い注文が発動し、買い注文の下に売り注文 が発注されます。

買いポジションが決済さ れると、売りストップも削除されます。

しかし、このBUYがクローズされずに、次のBUYなどがオープンされた場合はどうなるのでしょうか?

最初に設定されたこのSELLSTOPは、最初のBUYがクローズされた後にクローズするために、何らかの方法で把握する必要があります。

また、保留中のものを突破した後、損切りせずに終了した場合は、保留中のものが前と同じ場所に設定されたことになります。

-----------------------------------

いうのは、その売りが閉じられた後 別のマスターを持つ新しい売りが開か れ、それが削除 されるからです。

購入終了後、どうしたらいいかわからない。

 int i, k=OrdersTotal(),ti;
    for (i=0; i<k; i++){
   if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
    if(OrderType()== OP_SELLSTOP){
    ti = OrderMagicNumber();  }
    if(OrderType()== OP_BUY)
    if(OrderTicket()==ti) что дальше не пойму, как узнать о наличии ордера бай с нужным тикетом?

 
Top2n:

sig1 "シグナルが出さ れると 買い注文が発動し、買い注文の下に売り注文 が発注されます。

買いポジションが決済されると、売りストップも削除されます。

しかし、このBUYがクローズされずに、次のBUYなどがオープンされた場合はどうなるのでしょうか?

最初に設定されたこのSELLSTOPは、最初のBUYがクローズされた後にクローズするために、何らかの方法で把握する必要があります。

また、保留中のものを突破した後、損切りせずに終了した場合は、保留中のものが前と同じ場所に設定されたことになります。

-----------------------------------

いうのは、その売りが閉じられた後 別のマスターを持つ新しい売りが開か れ、それが削除 されるからです。

を購入した後、どのようにしたらいいのかわからない。


さて...同じSelectを使ってチェックするのですが...

int i, k=OrdersTotal(), ti, tid;

for (i=0; i<k; i++){
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
       if (OrderType()== OP_SELLSTOP) {
          tid = OrderTicket(); // запомним тикет ордера селлстоп - если его придётся удалить...
          ti = OrderMagicNumber();  
          //  ищем ордер по тикету
          if (OrderSelect(ti, SELECT_BY_TICKET)==true) {
             // проверяем Закрылся ли этот ордер - это твоя Байка
             if (OrderCloseTime() > 0) {
                //  удаляем ордер Селлстоп - если связанная с ним байка Закрылась...
                OrderDelete(tid);
             }
          } 
       }
    }
}
 
いろいろなアイデアが浮かんできますね...。頑張ってください。時間を無駄にしないでください...あなたのマーチンゲールはそんなに簡単には動かない。
 
Aleksander:
いろいろなアイデアが浮かんできますね...。頑張ってください。時間を無駄にしないでください...あなたのマーチンゲールはそんなに簡単には動かない。
やったー!!ありがとうございます))簡単じゃないわけがない。