[警告は閉鎖されました!】フォーラムを乱雑にしないために、どんな初心者の質問でも。プロフェッショナルは、通り過ぎないでください。あなたなしでは、どこにも行けない。 - ページ 699

 
artmedia70:

ここで、あなたは

void OpenBuy() {

double dStopLoss = 0, dTakeProfit = 0;
double Lots_New = Lot;

if (isLossLastPos(NULL, -1, MAGIC))
Lots_New *= 2;
else if (!isLossLastPos(NULL, -1, MAGIC))

Lots_New = Lot;

これは関数で、この関数の一番最初に、Lots_Newという変数に値=Lotを代入しています。

いつも元の状態に戻すと、その後どう変わるか考えてみてください。

どこに書けって言ったんだ?スタート機能の前の 外部変数に...

そして、ロット値を正しいサイズに正規化する。

Lots_New = NormalizeLot(Lot*2, False, "");




本当にありがとうございました。

また、その後の負け注文のたびにロット値を追加することができるかどうか教えてください。 次のような使い方ができます。

1 ロット 0.01

2 ロット 0.01

3区画 0.02

4区画 0.03

5区画 0.07

.....

15区画 1.2

ロット値をコードで変更できるようにすること。

そして、万が一、利益が出るような取引があれば、すべて最初に戻るということだ。

事前にお礼を申し上げます。

ありがとうございます。

 
Necron:
Roger、ありがとうございます。しかし、まだ正しく動作しません。別のトレーリングストップを追加しようとしましたが、エラーはまだ残っています :( 1つのポジションのトレーリングストップと複数のポジションのトレーリングストップを一度に追加することの違いはありますか? 。

原理的に違いはない。
私の関数を試してみてください。パラメータとして、medjicと希望するtrawlを渡すだけです。
この関数の呼び出しは、起動時、任意の場所で、毎ティックごとにそこに「噴射」する限りにおいて実行される。

//+------------------------------------------------------------------+
void trailing(int magic, int trailing){
   int index = 0;
   while(trailing > 0 && OrdersTotal() != 0 && OrderSelect(index, SELECT_BY_POS)){
      if(OrderMagicNumber() == magic){
         if(OrderType() == OP_BUY){
            if(Bid - OrderStopLoss() > Point*trailing){
               if(trailing >= MarketInfo(Symbol(), MODE_STOPLEVEL) && trailing > MarketInfo(Symbol(), MODE_FREEZELEVEL))
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), Bid - (Point*trailing), OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
            }
            return;
         }
         if(OrderType() == OP_SELL){
            if(OrderStopLoss() - Ask > Point*trailing || OrderStopLoss() == 0){
               if(trailing >= MarketInfo(Symbol(), MODE_STOPLEVEL) && trailing > MarketInfo(Symbol(), MODE_FREEZELEVEL))
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), Ask + (Point*trailing), OrderTakeProfit(), 0))Print(">>> ERROR ", GetLastError());
            }
            return;
         }
      }
      index++;
   }
}
//+------------------------------------------------------------------+

当然ながら、オーダーには異なるスライダーが必要です。

 
なぜうまくいかないのか、教えてください。

OrderSelect(1,SELECT_BY_POS,MODE_TRADES);

エラーコード 4051 です。OP_BUY注文が1件空いています。
ファイル:
ma_1.mq4  3 kb
 
itum:

問題を解決するのを手伝ってください


未決済または保留の注文を検索します。もし、それが可能なら、私はどちらの注文が買いか売りかを判断します。ある条件下で(一方が他方より大きいか、3番目より小さい場合)、この注文をクローズしたい。そのパラメータを変更して、もう一度開いてください。

問題は、注文を閉じるシグナルと開くシグナルが常に存在することです。そのため、私の注文は閉められたり、また開いたりしているので、開いたり閉じたりしています・・・。)))

この問題を解決するには?ガー
デジャヴかな...。私だけでしょうか?すでに何度か返信があったようですが...。え?
ここに開閉条件のコードを入れてください。指をかける...。:)
 
an11:
なぜうまくいかないのか、教えてください。

OrderSelect(1,SELECT_BY_POS,MODE_TRADES);

エラーコード 4051 です。OP_BUY注文が1件空いています。

OrderSelect() 関数の数値カウントは0から始まります。で、1があるから、マーケットには1しかないのに、2順目を探している、ということになり、うまくいかないわけです。

 
Vinin:
パラメータでは可能ですが、パターンでは不可能です。まず基準を明確にする必要があります。似ている、似ていない。そして、もし似ているとしたら、どの程度なのか。少なくとも、どの程度(パーセンテージ)。一方は時間的要素、他方は価格的要素である。それらをどのように相関させるか。ニューロニックレイヤーは付けられるけど。コウホネン層はそれをうまく実現しています。

私のインジケータには1つのパターンが12種類あり、パターンは同じですが、値は常に異なっており、その比率も異なっています )), ....)ニューラルネットワークを扱ったことがないので、mqlを使って初歩的なアルゴリズムを書いた経験があれば、修正できるかもしれませんが、十分ではないでしょう。私は、パターン発生の瞬間にすべてのパラメータをエクセルの中に書き込み、もし取引が開始されたらその結果をエクセルの分析を使って、収益性との相関関係でより多くのマッチを探さなければならないという、コホーネンに代わる以前の「野蛮な」このタスクに対処した。いずれにせよ、私は何かを得て、システムは賢くパターンを定義しましたが、それでもあまりスマートではありませんでした)。
 
cyclik33: ...

どのような関数をお使いかわかりませんが、一般的な考え方はこうです。ピッチが均一ではないので、配列を使うといいと思います。必要なボリュームをその中に書き込んで、関数を使ってその値を調べていくのです。

私のコードでの例。

//+------------------------------------------------------------------+
double getMartinLot(double lot, double arrayLot[]){//ФУНКЦИЯ УПРАВЛЕНИЯ ОБъЕМОМ ТОРГОВ ПО СИСТЕМЕ МАРТИНГЕЙЛА
   static double balance_before, balance_after;    //ДЛЯ ХРАНЕНИЯ СОСТОЯНИЯ БАЛАНСА ДО И ПОСЛЕ СДЕЛОК
   static double save_Lot;   
   static int loop;
   if(loop == ArraySize(arrayLot))loop = 0;   
   balance_after = AccountBalance();               //СОХРАНЕНИЕ ТЕКУЩЕГО СОСТОЯНИЯ БАЛАНСА   
   if(balance_after >= balance_before){            //ПРОВЕРКА ИЗМЕНЕНИЯ БАЛАНСА
      save_Lot = lot;                              //ЕСЛИ ОН НЕ ИЗМЕНИЛСЯ ИЛИ СТАЛ БОЛЬШЕ, ТО СБРАСЫВАЕМ ЛОТ
      loop = 0;
   }else{
      save_Lot = arrayLot[loop];                   //ЕСЛИ СТАЛ МЕНЬШЕ ТО УВЕЛИЧИВАЕМ ЛОТ
      loop++;
   }
   balance_before = balance_after;                 //СОХРАНЯЕМ СОСТОЯНИЕ БАЛАНСА ПОСЛЕ РАБОТЫ
   return(save_Lot);
}
//+------------------------------------------------------------------+
関数呼び出しの 例。
//+------------------------------------------------------------------+
int start()
  {
   double volume[] = {0.1, 0.1, 0.2, 0.3, 0.7};   //создаем массив с объемами

   if(OrdersTotal() == 0){
      OrderSend(Symbol(), OP_BUY, getMartinLot(0.1, volume), Ask, 10, Bid - 25*Point, Bid + 25*Point, "", 777);
   }
}
//+------------------------------------------------------------------+
 
artmedia70:
デ・ジャ・ヴだと思う...。私だけでしょうか?すでに何人もの方が回答されていますが...。え?
ポーズを開く、開くという条件でコードを入れてください。指をかける...。:)
私もです :)))ヴァレンティンは、なぜかコードを見せたがらない。おそらく、自分のアイデアを見せたくないのだろう...。
 
ToLik_SRGV:

どのような関数をお使いかわかりませんが、一般的なアイデアとして、ピッチがフラットではないので、配列を使うことをお勧めします。必要なボリュームを配列に書き込んで、関数を使って値を調べていきます。

私のコードでの例。

関数呼び出しの例。

ありがとうございました!!!!!!!

私はあなたのコードも使っていますが(ちなみにうまく動作しています)、Artemisのコードを別のEAにインストールしたいと思いました。

今回も本当にありがとうございました!!!これから挑戦してみます!

 

エキスパートアドバイザーがM1で取引しているときに、注文を開くシグナルが来て、ストップがショートで、注文はスリップでクローズしたと仮定します。

同じ分単位で再度注文を開けないようにするにはどうしたらよいでしょうか。