そして、それを「漫画」にしよう(多通貨化) - ページ 2

 

私の関数を少し修正して、与えられた楽器とマジシャンの注文 数の合計を返すようにすることができます。

 
ALex2008 писал(а)>>

もし、あなたがそれを使って何をすべきかわからないなら、私はそれが本当のマルチになるかどうかを気にしない...またはちょうど他の人の順序を区別する...。1つのことの本質は - それは1つではなく、いくつかのペアで動作するようにすること)そして、デモでそれをテストすることは問題ではない、ちょうど1〜2ヶ月ですが、結果は興味深いものです)。

マルチフォールドExpert Advisorのロジックを定式化する、より詳細な、おそらくあなたは助けを必要としません。

原則として、タスクの明確な理解が成功の9割を占めます。

 
sergeev >> :

ところで、あなたのコードには間違いがある! たくさんだ!

iLow(PERIOD_H4,0,0) - これは何だ?

現在のローソク足の安値))

確かに......!では、テストではどうなのでしょうか?

どうしてこんな風になったのか、自分でもよくわからない。iLow(NULL,PERIOD_H4,0) となるはずです。

 
xeon >> :

多価の専門家の論理を定式化し、より詳細であればあるほどよく、これ以上の助けは必要ないかもしれません。

原則として、タスクの明確な理解が成功の90%を占めます。

論理が悪いわけではありません)ただ、経験がないだけです。どのような属性でも注文を追跡する必要があることは理解していますが、このようなことを書くのは初めてなので、1つだけ質問があるのですが......。関数とその実装について)

 
ALex2008 писал(а)>>

論理的には何も問題ないのですが)ただ、経験が浅いので...。どのような属性で注文を追跡する必要があるかは理解していますが、このようなことを書くのは初めてなので、一つの疑問が残るかと思います......。関数とその実装について)

機能については前ページをご覧ください。

 
Vinin >> :

前ページの機能を見る

ありがとうございます) コードに入れてみます)

執筆開始...

#define MAGIC 7779

の代わりに、この

   if(OrdersTotal()==0){
      mod=false;
      SetOrders();}

これを書いて

   if( Order_Count_Calculate(Symbol(), MAGIC)==0){
      mod=false;
      SetOrders();}

...失敗しました - 'Order_Count_Calculate' - 関数は結果を返しません。

もし私が正しく理解しているなら、この関数は現在のシンボル Symbol() のすべての注文を MAGIC で見つけるべきです。
 
ALex2008 писал(а)>>

ありがとうございます) コードに入れてみます)

執筆開始...

これは、まさにあなたが望まないものですextern string _Symbol = Symbol();

変数を定義することができ、inite()やstart()で値を代入した方が良いのですが

 
最初の関数で躓きました...( 要点は分かるのですが、正しい使い方が分かりません...。
 
ALex2008 писал(а)>>

論理的には何も問題ないのですが)ただ、経験が浅いので...。どのような属性で注文を追跡する必要があるかは理解していますが、このようなことを書くのは初めてなので、一つの疑問が残るかと思います......。関数とその実装について)

えー...。わかっていないようですが......。

を飛ばしたい」というタスクは、「何が飛んだのか」「どこに飛んだのか」など、論理的ではありません。

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

タスクの簡単な例です。

EURUSD、GBPUSD、USDCHF、USDJPYの同時使用。

H1期間。

通貨ペア選択条件

BUY条件

売り設定条件

ここでは、簡単な実装例を紹介します。

int MAGIC = 322223;
string Sym[]={"EURUSD", "GBPUSD", "USDCHF", "USDJPY"};    //Внесем в массив валютные пары с которыми будем работать
int start(){
   
   int s = SymbolSelect();                   //Функция выбора валютной пары
   if( SelectOrder( Sym[ s],OP_BUY, MAGIC)<0){   //Если нет установленного ордера по выбранному символу
      UpTrend( Sym[ s]);                       //Проверим условие установки ордера 
   }
   if( SelectOrder( Sym[ s],OP_SELL, MAGIC)<0){  //Если нет установленного ордера по выбранному символу
      DownTrend( Sym[ s]);                     //Проверим условие установки ордера 
   }

}


int SymbolSelect(){
  int s=-1;
  //Условие выбора валютной пары для работы  
   
  return( s)
}
    //+-------------------Выбор ордера---------------------------+
int SelectOrder(string Sym,int Tip,int MAGIC){
    int TotOrd=OrdersTotal();
    int OrdTick=-1;
    for(int OrdPos= TotOrd-1; OrdPos>=0; OrdPos--){
        if(OrderSelect( OrdPos, SELECT_BY_POS, MODE_TRADES)==true){
           if(OrderSymbol()== Sym){                                           //Есть ли ордера с нужным символом
              if(OrderType()== Tip){                                          //Если нужный тип ордера  
                 if( MAGIC==0){ MAGIC=OrderMagicNumber();}                     //Если магик = 0,неучитывать
                 if(OrderMagicNumber() == MAGIC){                            //Есть ли ордера с нужным Магик номером
                    OrdTick = OrderTicket(); break;                          //Запишем в переменную его тикет и прервем цикл 
    }}}}}
    return( OrdTick);                                                         //Возвращает тикет найденного ордера или -1
}
bool UpTrend(string Sym){
     //Условие установки BUY ордера
}
bool DownTrend(string Sym){
    //Условие установки SELL ордера
}

など

というか、ロジックを細かく考えていけば、実装に困ることはないでしょう。

 
xeon >> :

...それこそ、ロジックを細かく考えていけば、実装に困ることはないでしょう。

今日から考えます...。頭痛の種を発見した気分です))ありがとうございます。

とにかく、間違いのある原稿です...。>>訂正してください)

extern double Profit = 3000;

int MAGIC = 322223;

string Sym[]={"EURUSD", "GBPUSD", "USDCHF", "USDJPY"};    //Внесем в массив валютные пары с которыми будем работать

double b0, b1, s0, s1, StopLoss, Enter;
bool dwnSym, upSym, mod;

int init(){ Profit*=Point;
}

int start()
{
   
      int s = SymbolSelect();                      //Функция выбора валютной пары
      if( SelectOrder( Sym[ s],OP_BUYSTOP, MAGIC)<0){  //Если нет установленного ордера по выбранному символу
         UpTrend( Sym[ s]);                          //Проверим условие установки ордера 
         }
      if( SelectOrder( Sym[ s],OP_SELLSTOP, MAGIC)<0){ //Если нет установленного ордера по выбранному символу
         DownTrend( Sym[ s]);                        //Проверим условие установки ордера 
         }
      
      
      if( SelectOrder( Sym[ s],OP_BUYSTOP, MAGIC)>0 && AccountProfit()&& (! mod)){  //Если установлен ордер по выбранному символу
         SetStopBuy( Sym[ s]);                                                  //и он открылся, ставим стоп
         }
      if( SelectOrder( Sym[ s],OP_SELLSTOP, MAGIC)>0 && AccountProfit()&& (! mod)){ //Если установлен ордер по выбранному символу
         SetStopSell( Sym[ s]);                                                 //и он открылся, ставим стоп
         }
}

   int SymbolSelect(){
   int s=-1;
   return( s);}
   
//+-------------------Выбор ордера---------------------------+
   int SelectOrder(string Sym,int Tip,int MAGIC){
      int TotOrd=OrdersTotal();
      int OrdTick=-1;
      for(int OrdPos= TotOrd-1; OrdPos>=0; OrdPos--){
         if(OrderSelect( OrdPos, SELECT_BY_POS, MODE_TRADES)==true){
            if(OrderSymbol()== Sym){                                           //Есть ли ордера с нужным символом
               if(OrderType()== Tip){                                          //Если нужный тип ордера  
                  if( MAGIC==0){ MAGIC=OrderMagicNumber();}                     //Если магик = 0,неучитывать
                  if(OrderMagicNumber() == MAGIC){                            //Есть ли ордера с нужным Магик номером
                     OrdTick = OrderTicket(); break;                          //Запишем в переменную его тикет и прервем цикл 
      }}}}}
    return( OrdTick);}                                                         //Возвращает тикет найденного ордера или -1


//Условие и установка BUY ордера
   bool UpTrend(string Sym){
       
       if((iOpen( Sym,PERIOD_H4,1) - iClose( Sym,PERIOD_H4,1) <= 0) &&
         (iOpen( Sym,PERIOD_H4,2) - iClose( Sym,PERIOD_H4,2) > 0)){
          upSym=false;
          dwnSym=true;
          CloseOpenOrdersAndCancelPending();
          double Enter=iHigh( Sym,PERIOD_H4,1)+(Ask-Bid)+10*Point;
          OrderSend( Sym, OP_BUYSTOP, 0.1, Enter, 0, 0, Ask+ Profit, 0, 0,0, Green);}
   }

//Условие и установка SELL ордера
   bool DownTrend(string Sym){
       
       if((iOpen( Sym,PERIOD_H4,1) - iClose( Sym,PERIOD_H4,1) >= 0) &&
         (iOpen( Sym,PERIOD_H4,2) - iClose( Sym,PERIOD_H4,2) < 0)){
          upSym=true;
          dwnSym=false;
          CloseOpenOrdersAndCancelPending();
          double Enter=iLow( Sym,PERIOD_H4,1)-10*Point;
          OrderSend( Sym, OP_SELLSTOP, 0.1, Enter, 0, 0, Bid- Profit, 0, 0,0, Green);}
         
   }
   
//-------Вычисление и утановка стопа для бай
void SetStopBuy(string Sym)
   {
      RefreshRates();
      double b0=iLow( Sym,PERIOD_H4,0)-10*Point;
      double b1=iLow( Sym,PERIOD_H4,1)-10*Point;
      
            if( b0< b1) StopLoss= b1;
            else StopLoss= b0;
            RefreshRates();
            mod=OrderModify( OrdTick,OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);
   } 
   
 //-------Вычисление и утановка стопа для сел
void SetStopSell(string Sym)
   {
      RefreshRates();
      double s0=iHigh( Sym,PERIOD_H4,0)+(Ask-Bid)+10*Point;
      double s1=iHigh( Sym,PERIOD_H4,1)+(Ask-Bid)+10*Point;
      
            if( s0< s1) StopLoss= s0;
            else StopLoss= s1;
            RefreshRates();
            mod=OrderModify( OrdTick,OrderOpenPrice(), StopLoss,OrderTakeProfit(),0,Red);
   }
   
void CloseOpenOrdersAndCancelPending()
   {
      for (int i=OrdersTotal()-1; i>=0; i--){
      if (!OrderSelect( i, SELECT_BY_POS))  continue;
      if (OrderSymbol()!= Sym)        continue;
      OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),10);}
   }