[ARCHIVE]フォーラムを乱立させないために、どんなルーキーの質問でも。プロフェッショナルの皆さん、通り過ぎないでください。あなたなしではどこにも行けない - 5. - ページ 256

 
hoz:


昨日は急いでいたので、行かなければなりませんでした。その時の質問を書いたのであって、自分が望んでいた質問ではない。

実は、Expert Advisorは、ある条件のもとで大量の注文を出す(グリッド)という意味なんです。このようなExpert Advisorでは、スプレッドもストップロスも、AscやBidを上回る(下回る)価格位置も、何もチェックされていないのを見たことがない。自分で書いて、みんなに見せようと思っているんです。


なぜ、一部のゴリ押し専門家を例に挙げるのか?少なくともテスター専用、せいぜい上記のような曲がった手で書かれたものである...。
 
alsu:

なぜ一部のヲタクを例に出すのか、まったくもって疑問です。少なくともテスターのためだけのものであり、せいぜい上記のような曲がった手で書かれたものである...。

まあ、実装の仕方は理解できたのですが、他の人がどうやるのかを見てみようと思ったのです。
 

みんな、本当に恐ろしい問題を抱えているんだ!描画を保存してもグラフが左にずれないのですが!?シフトグラフ」機能発動!?どうすれば直るのか?


 

こんにちは。

Expert Advisorで1日に1回しか取引しないようにしたい。どうすればいいか教えてください。

 

こんにちは、私はしばらく前からmql4について調べています、多分経験豊富なプログラマーの一人が助けてくれるでしょう。注文が-30や-40になったときにロックする方法を知りたいのですが、このスクリプトにいくつかのプロパティを追加して、注文がマイナスになったときにすぐにロックするようにしなければなりません。

void start()
{
double StopLoss;
double Lots=0;
for(int i=0;i<OrdersTotal();i++)
{
if(!OrderSelect(i,SELECT_BY_POS))
continue;
if(OrderSymbol()!=Symbol())
continue;
if(OrderType()==OP_BUY)
Lots+=OrderLots();
if(OrderType()==OP_SELL)
。Lots-=OrderLots();
}
if(Lots>0)
OrderSend(Symbol(),OP_SELL,Lots,Bid,3,Ask+StopLoss*Point,0,NULL,Red).Lots-=OrderLots();
if(Lots<0)
OrderSend(Symbol(),OP_BUY,-(Lots),Ask,3,Bid-StopLoss*Point,0,NULL,Blue)。

 
protey7:

こんにちは。

Expert Advisorで1日に1回しか取引しないようにしたい。どうすればいいか教えてください。

extern int MagicNumber=555;
//---
if (OrdersTotal()>0) // Есть ли отложенные ордера или открытые позиции
{  for (i=OrdersTotal()-1; i>=0; i--) // Перебираем ордера
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) // Oрдер выбирается среди открытых и отложенных ордеров
      {  if (OrderSymbol()!=Symbol()) continue; // Если торговый символ не тот, на котором работает эксперт - игнорируется
         if (OrderMagicNumber()!=MagicNumber) continue; // Если магик номер не тот, что надо - игнорируется
         if (OrderOpenTime()>=iTime(NULL,PERIOD_D1,0)) // Если время открытия ордера больше или равен началу открытия данной свечи,
                                                       // то дальший код эксперта не работает. Вместо PERIOD_D1 можно вставить любой другой период.
            return(0);
}  }  }
 
Wild_Wolf:

みんな、本当に恐ろしい問題を抱えているんだ!描画を保存してもグラフが左にずれないのですが!?シフトグラフ」機能発動!?どうすれば直るのか?

注:右上のグラフには、このような小さな三角形があります。カーソルを合わせると、ツールチップに「チャートシフト」と表示されます。フックをかけて、必要なだけ左に移動して、右側にスペースを確保する。
 
hoz:

まあ、実装の仕方は理解できたのですが、他の人がどうやっているのかを見てみようと思ったのです。
もし、他の人が窓から飛び降りるようになったら?
 
paladin80:


ご指摘ありがとうございます。

提案されたバリエーションではエキスパートが機能しないだけです)))以下は、私が入手した動作中のバリアントです。

if (OrdersTotal()==0) //未決済ポジション がない場合

{ for (int i=OrdersHistoryTotal()-1; i>=0; i--) // アカウント履歴一覧から注文を検索する

{ if (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) // 終了した注文の中から選択されたものである。

{

if (OrderCloseTime()>=iTime(NULL,PERIOD_D1,0)) // 注文終了時刻が現在のローソク足の始点以上である場合。

// Expert Advisor が動作しない。PERIOD_D1 の代わりに他のピリオドを挿入することができる。

return(-1)です。

} }}

 
alsu:

なんで一部のヲタクを例に出すんだ?最低でもテスター専用、最大でも上記で言われているように曲がった手で書かれたもの...。


私流に書いてみました。特に最適化したわけではなく、動作させ、ロジックを示すために書いただけです。

//+-------------------------------------------------------------------------------------+
//| Открытие длинной позиции                                                            |
//+-------------------------------------------------------------------------------------+
bool OpenBuy(double initialOOP, int i)
{
   int ticket;
   
   ticket = OrderSend(Symbol(), OP_BUYSTOP,0.1,NormalizeDouble(Ask + (step*i) * pt, Digits),3,0,0,NULL,i_magic,0,CLR_NONE);
   
   if (ticket > 0)
       return (true);
}
//+-------------------------------------------------------------------------------------+
//| Открытие короткой позиции                                                           |
//+-------------------------------------------------------------------------------------+
bool OpenSell(double initialOOP, int i)
{
   int ticket;
   
   ticket = OrderSend(Symbol(), OP_SELLSTOP,0.1,NormalizeDouble(Bid - (step*i)*pt, Digits),3,0,0,NULL,i_magic,0,CLR_NONE);
   
   if (ticket > 0)
       return (true);
}
//+-------------------------------------------------------------------------------------+
//| Посылаем пачку ордеров на сервер                                                    |
//+-------------------------------------------------------------------------------------+
bool SendPackOfOrders(int lastPosTicket, int lastPosType, double initialOOP)
{
   if (lastPosTicket == -1)                        // Если нет рыночных ордеров, значит..
       return(false);                              //..сетку отложек не кидаем
       
  // if (lastPosType != g_lastPosType)               // Если тикет изменился, значит..
   {
      lastPosType = g_lastPosType;
      
      for (int i=1; i<=5; i++)
      {
         if (!OpenBuy(initialOOP, i))
             return(false);
         if (!OpenSell(initialOOP, i))
             return(false);
      }
   }
}

ステップとは、オーダーのグリッド間隔のことです。

私が質問したいのは、これです。私の論理は正しいのでしょうか?より速く動作するようにコードを改良する方法はありますか?性能面では...

また、各メッセージの後にポーズを入れる必要があるのではという考えもあります。さて、これらの指摘を総合すると、私には非常に興味深いものがあります。