[ARCHIVE] フォーラムを散らかさないように、どんなルーキーでも質問してください。プロフェッショナルは、通り過ぎないでください。Nowhere without you - 3. - ページ 509

 

edyuson:
Как зделать, чтоб не сразу умножал, а скажем через два-три раза? Пример: лот=0,01, еще - 0,01, еще - 0,01 и только после умножать. Подскажите, если не много возни. Спасибо.

セルゲイ

intカウンターを作成し、開くたびに+1する。

正しいカウンタ値が設定されたら、ロット*コエフもできるようにします。


そう、思ったほど簡単なことではないのです、今、それが起こり始めているのです。そして、ロット-0.01、ロット-0.01、ロット-0.01と、ロット-0.02、ロット-0.02、さらにロット-0.02を掛けた後にのみ、ロット-0.04、ロット-0.04・・・、というサイクルになります。は利益で中断し、ロットで継続する必要があります。これについては、他の掲示板の人たちから変種が出たんですよ。double koef[]={ 1.0, 2.0, 1.0, 1.0, 1.0, 2.0, 1 ... と宣言することができます。0, 1.0, 2.0 .......}- を配列とし、必要な係数を詰め、静的変数 またはグローバル変数 int k=0;
それから lot=lot*koef[k++]; 開始系列:k=0;

など
int k = 1;
int koef = 3;
if (k/koef == k) { lot*=2; k++; } しかし、すべてが間違っているのである。

int j;
for(j=0; j<15; j++)
のようなカウンターを試しましたが、やはり同じようにはいきません。
int X=0;
double S = 0.0000;
extern double lot=0.01;
extern double koef=2.0;
extern int SL=30;
extern int TP=120;
double dl;
double a;
int init()
{
a=lot;
return(0;
}.
int deinit()
{
return(0);
}.

int start()

{
if(OrdersTotal() == 0 && X==1)
{
if (Close[0]>dl){lot=a;}.
X=0;
}.

if(OrdersTotal() == 0 && X==2)
{
if (Close[0]<dl){lot=a;}.
X=0;
}.


if (OrdersTotal() == 0 && Close[1]>Open[1])
{
dl=Close[0];
OrderSend(Symbol(),OP_BUY,lot,Ask,3,Ask-SL*0.0001,Ask+TP*0.0001,",14774,0,Blue);
//----------------------------------------------------

lot=lot*koef;
X=1;
}

if(OrdersTotal() == 0 && Close[1]<Open[1]):注文を出す。

dl=Close[0];
OrderSend(Symbol(),OP_SELL,lot,Bid,3,Bid+SL*0.0001,Bid-TP*0.0001,",14774,0,Red);
//sudy some haler may help
lot=lot*koef;

X=2;
} } } } { {dl=Close[0]; {dl=Close[0]; } {size=2] {dl=Close[0]; {dl=Lot*koef; {dl=Lot*koef
}
return(0);
//ただのマーチンです。

 

ありがとうございます、でも見てください、二つの価格があります、一つは注文の開始価格、もう一つはストップロスの価格です、ストップロスまでのポイント数とポイントの価格は分かっているのです。価格がストップロスに達した場合の損失が入金額の10%になるように、ロットサイズを計算するにはどうすればよいですか?ただ、私は数字が苦手なんです。

また、私は理解できません。

クロス・レートの場合、ドルで表示されるポイント値は、
PIP = LOT_SIZE * TICK_SIZE * BASE_QUOTE / CURRENT_QUOTE,
ここで LOT_SIZE はロットサイズ、TICK_SIZE はティックサイズ、BASE_QUOTE は基準(第一)通貨の米ドルに対する現在の相場、 CURRENT_QUOTE は現在のペアレートとなります。

この最初の通貨を米ドルにすることをどのように理解していますか?

 

そうですね...っ:-)

米ドルに対する基本(最初の)通貨は、例ではGBP to JPY - GBP/JPYで、GBP/USDと なります。

この スクリプトは、資金量と損切りサイズに応じて取引されたポジション量を計算するもので、必要なものを作り直しました。

あなたも必要です。「ある問題に直面し、すでに3日間も格闘しているが解決できない。完成したExpert Advisorでは、私はリスクの%を入力するロットの代わりに決定したので、私は、例えば10 000デポで100ポイントの停止で1%のリスクは、それが約0.1ロットになり、ここで200ロット停止でロットは0.05でなければならない、だから1%のリスクは同じレベルにとどまっています停止するには、多くの計算する必要があります。すべてクリアしていることを祈ります。 そして、ここに書いていますね。

"例えば価格がストップロスに達した場合、損失が入金額の10%になるようにロットサイズを計算 するにはどうすればよいですか?数字が 苦手なんです。"

チュートリアルのロット計算 機能を修正しました。その説明と方法は同じですが、入金額の割合でロットを計算する代わりに、取引ロットはあなたの(この例では私が与えた - 上のリンクのスクリプトを参照)条件によって正確に計算されます。

extern string A0 = "Параметры ММ и мониторинга";
extern double Lots = 0;           // Стартовый лот = 0 для использования максимального риска на капитал в процентах, в зависимости от величины стоп-лосса
extern int StopLoss = 1000;
extern int TakeProfit =4000;      // TakeProfit для новых ордеров (пунктов)
extern  double MaxRisk = 10;      // риск на капитал в %
                                  // рассчитываем объем позиции взависимости от размера стопа, при заданном риске
                                  // например при депо 10 000 риск 1% при стопе 100 пп это будет примерно лот 0.1,
                                  // при стопе 200 пп уже лот должен быть 0.05, для того чтобы риск 1% остался на том же уровне

int start()
{    
   //----------------------------------СТАРТ------------------------------------------------------------------------------------- 
 
// ...  

//----------------------------------Расчет объема лота------------------------------------------------------------------------ 
  if (Lot(StopLoss)==false)  
                        {
                          Comment(" Пополните счет. Не хватает средств на минимальный лот. Советник остановлен.");// Если средств не хватает на мин, то выход
                          Print  ("Не хватает средств на минимальный лот. Lots_New = ",Lots_New, " AccountFreeMargin() = ", AccountFreeMargin()); 
                                                                                                   // Если средств не хватает на мин, то выход
                          return (0);
                        }  
// ---------НОРМАЛИЗУЕМ НОВЫЕ РАСЧЕТНЫЕ ЛОТЫ И ОТКРЫВАЕМ ОЧЕРЕДНУЮ ПОЗИЦИЮ...                          
   Lots_New = NormalizeLots(Lots_New);      

//... здесь условия на открытие поз и установка ордеров

}//------------------------------------------Конец Старт-----------------------------------------------------

//+------------------------------------------------------------------+
//| Нормализация лота                                                |
//+------------------------------------------------------------------+

double NormalizeLots(double lot)
{
   double lotStep = MarketInfo(Symbol(), MODE_LOTSTEP);
   double lots = NormalizeDouble(lot / lotStep, 0) * lotStep;   
   lots = MathMax(lots, MarketInfo(Symbol(), MODE_MINLOT));
   lots = MathMin(lots, MarketInfo(Symbol(), MODE_MAXLOT));   
   return (lots);
}

//--------------------------------------------------------------------
// Lot.mqh
// 
//--------------------------------------------------------------- 1 --
// Функция вычисления количества лотов.
// Глобальные переменные:
// double Lots_New - количество лотов для новых ордеров (вычисляется)
// double Lots     - желаемое количество лотов, заданное пользовател.
// double  MaksRisk  - процент риска
// Возвращаемые значения:
// true  - если средств хватает на минимальный лот
// false - если средств не хватает на минимальный лот
//--------------------------------------------------------------- 2 --
bool Lot(int sl)                               // Позовательская ф-ия
  {
   string Symb   =Symbol();                    // Финансовый инструм.
   double One_Lot=MarketInfo(Symb,MODE_MARGINREQUIRED);//Стоим. 1 лота
   double Min_Lot=MarketInfo(Symb,MODE_MINLOT);// Мин. размер. лотов
   double Max_Lot =MarketInfo(Symbol(),MODE_MAXLOT);
   double Step   =MarketInfo(Symb,MODE_LOTSTEP);//Шаг изменен размера
   double Free   =AccountFreeMargin();         // Свободные средства
   double LotVal =MarketInfo(Symbol(),MODE_TICKVALUE);//стоимость 1 пункта для 1 лота
   

//--------------------------------------------------------------- 3 --
   if (Lots > 0)                                 // Лоты заданы явно..
     {                                         // ..проверим это
      double Money=Lots*One_Lot;               // Стоимость ордера
      if(Money<=AccountFreeMargin())           // Средств хватает..
         Lots_New=Lots;                        // ..принимаем заданное
      else                                     // Если не хватает..
         Lots_New=MathFloor(Free/One_Lot/Step)*Step;// Расчёт лотов
     }
//--------------------------------------------------------------- 4 --
  else                                        // Если лоты не заданы
     {                                         // то берём процент 
                                               // Желаем. колич.лотов:
                                               
      Lots_New =MathFloor((Free*MaxRisk/100)/(sl*LotVal)/Step)*Step;
      if(Lots_New<Min_Lot) Lots_New=Min_Lot;
      if(Lots_New>Max_Lot) Lots_New=Max_Lot;
      Print ("Lot_New в ф-ии Lots = ",Lots_New, "ширина канала = ",sl, "Point  = ",Point);
     }
//--------------------------------------------------------------- 5 --
   if (Lots_New < Min_Lot)                     // Если меньше допуст..
      Lots_New=Min_Lot;                        // .. то миниамальный
   if (Lots_New*One_Lot > AccountFreeMargin()) // Не хватает даже..
     {                                         // ..на минимальн. лот:(
      Print ("Не хватает средств на минимальный лот.  Lots_New = ",Lots_New, " AccountFreeMargin() = ", AccountFreeMargin());  // Сообщение..
      return(false);                           // ..и выход 
     }
   return(true);                               // Выход из польз. ф-ии
  }
//--------------------------------------------------------------- 6 --
 
Reshetov:
static int Kvadrat = 0;



この方法を試してみました。今、テスト期間中、保留中の STOPLOSS注文が 1つオープンして、それだけです。私の端末が不具合なのかも?

このプログラムは、毎日午前7時から9時の間に最高値と最低値を見つけ、その水準でストップオーダーを出すことになっています。

ファイル:
 
mamba5:


この方法を試してみました。今、テスト期間中、保留中のSTOPLOSS注文が1つオープンして、それだけです。私の端末が不具合なのかも?

ログを見ても、具体的に何が不具合なのかわからないということはありませんか?
 

こんにちは。

機能に関して何か問題があった方はいらっしゃいますか?

IsDemo()

?

私はいつも1つの結果を得ます - その口座は本物です(本物かデモかに関係なく)。

 
nemo811:

こんにちは。

機能に関して何か問題があった方はいらっしゃいますか?

?

私はいつも1つの結果を得る - 私の口座は本物です(本物またはデモであるかどうかに関係なく)。

デモ 口座でコード付きのEAをチャートに表示させました。

int start()
  {
//----
   if (IsDemo()) {
      Print("Это демо");
      return(0);
   }
   Print("Это не демо");
   
//----
   return(0);
}
雑誌に書き込む。"デモ "です。
 
Reshetov:

デモ口座にコード付きのEAを入れています。

ログに書き込まれます。"デモ "です。

phibogroupでデモをやっているのですが、なぜかリアル口座と表示されます。あなたのバージョンでは、「これはデモではありません」と表示されています。

なぜかDC自体が曲解されていることが判明

 
nemo811:

phibogroupでデモをしているのですが、なぜかリアルと表示されます。あなたのバージョンの写真では - それはデモではありません。

なぜかDC自体が変態化していることが判明

ブローカーによっては、1つのサーバーをデモ用とリアル用の両方に提供しているところもあります。ブローカーのサポートに確認してください。
 
Reshetov:
ブローカーによっては、1つのサーバーでデモと本番の両方に対応しているところもあります。証券会社のサポート部門にご確認ください。

ありがとうございます。