template <typename T> void Swap( T &Value1, T &Value2 ) { const T Tmp = Value1;
Value1 = Value2; Value2 = Tmp; }
// Сортировка массива любого простого типа template <typename T> bool MyArraySort( T &Array[] ) { if (!ArraySort(Array)) { constint Size = ArraySize(Array);
for (int i = 0; i < Size - 1; i++) { const T Tmp = Array[i];
for (int j = i + 1; j < Size; j++) if (_R(Tmp) == Array[j]) // TypeToBytes.mqh { Swap(Array[i + 1], Array[j]);
i++; } } }
return(true); }
// Возвращает количество различных элементов массива, которых не меньше Repeat template <typename T> int Strange( const T &InArray[], constint Repeat = 2 ) { int Res = 0;
T Array[];
constint Size = ArraySize(InArray);
if ((ArrayCopy(Array, InArray) == Size) && MyArraySort(Array)) { int Tmp = 1;
for (int i = 1; i < Size; i++, Tmp++) if (_R(Array[i - 1]) != Array[i]) // TypeToBytes.mqh { if (Tmp >= Repeat) Res++;
//-----ищет цену последнего открытого ордера--------------------------------------------------------------- double OpenPrice = 0.0;
int orders=OrdersTotal(); for(int i=orders-1;i>=0;i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) { Print("Error in history!"); break; } if(OrderSymbol()!=Symbol())continue; if( OrderType()==OP_SELL||OrderType()==OP_BUY)
OpenPrice = OrderOpenPrice(); break; }
//------если нет открытых позиций открывает два отложника------------------------------------------------------ int kolpos=0; for (int pos=0; pos<OrdersTotal(); pos++) { OrderSelect(pos,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic) kolpos++; } if (kolpos==0) { OrderSend(Symbol(),OP_BUYSTOP,perv_Lot,Ask+shag1*Point,slipage,0,0,NULL,magic,0,clrGreen); OrderSend(Symbol(),OP_SELLSTOP,perv_Lot,Bid-shag1*Point,slipage,0,0,NULL,magic,0,clrRed); } //--------------определяет если есть открытые позиции--------------------------------------------------------------------- int order=0; for (int pos=0; pos<OrdersTotal(); pos++) { OrderSelect(pos,SELECT_BY_POS,MODE_TRADES); if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic)
if(OrderType()==OP_SELL||OrderType()==OP_BUY) //если это продажи или покупки считаем что сделки открыты
order++; } if(order>0) //--------------- находит и удаляет отложки.--------------------------------------------------------------- {
for(ic=OrdersTotal()-1;ic>=0;ic--) { if(OrderSelect(ic,SELECT_BY_POS,MODE_TRADES)==false) continue; if (OrderSymbol()==Symbol()) { if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)//если это отложки то удаляем { ret=OrderDelete(OrderTicket());//удалил отложки } }} //--------------ищем последний открытый ордер------------------------------------- for(ic=OrdersTotal()-1;ic>=0;ic--) { if(OrderSelect(ic,SELECT_BY_POS,MODE_TRADES)==false) continue; if (OrderSymbol()==Symbol()&&OrderMagicNumber()==magic&&OrderOpenPrice()==OpenPrice)
{
double minus=NormalizeDouble( Ask-OpenPrice,Digits); double plus= NormalizeDouble(Ask-OpenPrice,Digits); if(Digits==3) { minus=minus*100; plus=plus*100; } if(Digits==5) { minus=minus*10000; plus=plus*10000; } //-------------если последний открытый ордер SELL-------------------------------------------------------------- if (OrderType()==OP_SELL) { if(plus<=-profit) { for(int i=OrdersTotal()-1;i>=0;i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES); if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,slipage,0); if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,slipage,0); } } //---------------а если цена пошла в минус--------------------------------------------------------------------------- if( minus>=koredor) { double Lot=OrderLots(); OrderSend(Symbol(),OP_BUY,Lot*2,Ask,slipage,0,0,NULL,magic,0,clrRed);// открываем BUY с удвоеным лотом } } double minusbuy=NormalizeDouble(Ask-OpenPrice,Digits); double plusbuy=NormalizeDouble(Ask-OpenPrice,Digits); if(Digits==3) { minusbuy=minusbuy*100; plusbuy=plusbuy*100; } if(Digits==5) { minusbuy=minusbuy*10000; plusbuy=plusbuy*10000; } //-----------------если последний ордер Buy-------------------------------------------------------------------------------- if (OrderType()==OP_BUY) { if(plusbuy>=profit)//-------если цена пошла в плюс------------------------------------------------------- { for(int i=OrdersTotal()-1;i>=0;i--) { OrderSelect(i,SELECT_BY_POS,MODE_TRADES);//---находим и закрываем все открытые ордера-------------------- if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,slipage,0); if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,slipage,0); } } //-----------------------------а если цена пошла в минус------------------------------------------------------------------ if(minusbuy<=-koredor) { Comment("Ордеров -",order); double Lot=OrderLots(); OrderSend(Symbol(),OP_SELL,Lot*2,Bid,slipage,0,0,NULL,magic,0,clrRed);//открываем ордер SELL с удвоенным лотом---- } } }}}}
externstring WmiFor = "Параметры индикатора WmiFor"; externbool IsTopCorner = true; // Информационный блок в верхнем углу? externint Offset = 1; // Смещение исходного образца в барах (для проверки надежности прогноза) [1..] externbool IsOffsetStartFixed = true; // Фиксировано ли начало образца externbool IsOffsetEndFixed = false; // Фиксирован ли конец образца externint PastBars = 24; // Размер образца в барах, который ищется на истории [3..] externint ForecastBars = 24; // На сколько баров вперед делать прогноз [1..] externint MaxAlts = 5; // Искать указанное кол-во лучших образцов [1..100] externbool ShowCloud = true; // Показывать ли облако externbool ShowBestPattern = true; // Показывать ли максимально близкий образец externbool IsExactTime = true; // Должно ли совпадать время образцов (для учета эффекта сессий) externdatetime MinDate = D'01.01.2001'; // Минимальная дата образца externint PeriodMA = 2; // Периуд сглаженной средней externdouble ScalePercents = 90.0; // Рассматривать только образцы с этим минимальным процентом совпадения externcolor IndicatorCloudColor = Sienna; // Цвет облака похожих вариантов externcolor IndicatorBestPatternColor = DodgerBlue; // Цвет самого похожего образца externcolor IndicatorVLinesColor = Sienna; // Цвет вертикальных линий-границ образца externcolor IndicatorTextColor = MediumBlue; // Цвет текста инф.блока externcolor IndicatorTextWarningColor = Tomato; // Цвет предупреждений в тестовом инф.блоке externint XCorner = 5; // Отступ инф.блока индикатора от правой границы графика externint YCorner = 5; // Отступ инф.блока индикатора от верхней границы графика externstring FontName = "Arial"; // Шрифт тестового инф.блока externint FontSize = 7; // Размер шрифта тестового инф.блока
ArraySortは単純な構造であれば簡単に書くことができます。
template <typename T>
void Swap( T &Value1, T &Value2 )
{
const T Tmp = Value1;
Value1 = Value2;
Value2 = Tmp;
}
// Сортировка массива любого простого типа
template <typename T>
bool MyArraySort( T &Array[] )
{
if (!ArraySort(Array))
{
const int Size = ArraySize(Array);
for (int i = 0; i < Size - 1; i++)
{
const T Tmp = Array[i];
for (int j = i + 1; j < Size; j++)
if (_R(Tmp) == Array[j]) // TypeToBytes.mqh
{
Swap(Array[i + 1], Array[j]);
i++;
}
}
}
return(true);
}
// Возвращает количество различных элементов массива, которых не меньше Repeat
template <typename T>
int Strange( const T &InArray[], const int Repeat = 2 )
{
int Res = 0;
T Array[];
const int Size = ArraySize(InArray);
if ((ArrayCopy(Array, InArray) == Size) && MyArraySort(Array))
{
int Tmp = 1;
for (int i = 1; i < Size; i++, Tmp++)
if (_R(Array[i - 1]) != Array[i]) // TypeToBytes.mqh
{
if (Tmp >= Repeat)
Res++;
Tmp = 0;
}
if (Tmp >= Repeat)
Res++;
}
return(Res);
}
void OnStart()
{
int Array[] = {1, 2, 2, 3, 3, 3, 4, 4, 4, 4};
const int Size = ArraySize(Array);
MqlTick Ticks[], NullTick = {0};
ArrayResize(Ticks, Size);
for (int i = 0; i < Size; i++)
{
Ticks[i] = NullTick;
Ticks[i].time = Array[i];
}
for (int i = 1; i <= 4; i++)
{
Print(Strange(Array, i));
Print(Strange(Ticks, i));
}
}
こんばんは、私の書いたEAとでも いうのでしょうか、よろしくお願いします。
一般的に、EAは私が期待したとおりの働きをしてくれます。しかし、ひとつだけ不思議な不具合があります。
1) 保留注文の代わりに、0.02ロットの売りポジションを最初に建てる場合があります。スクリプトによれば、そうではないはずなのですが。(どこかのミス)。うまくいくときもあれば、最初の1枚でSellが開くときもあり、何が関係しているのか理解できない。
このエラーについて助けてください。私の文章や誤りについて、EAに総評を述べたいと思います。初めてExpert Advisorを作りました、確実に判断してください。
//| ALEXANDROS_001.mq4 |
//| Copyright 2017, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
input double perv_Lot=0.01;
input double shag1=40;
input double profit=20;
input double koredor=10;
input int magic=907;
input int slipage=10;
int ret,ORD=0,ic;
//
void OnTick()
{
//-----ищет цену последнего открытого ордера---------------------------------------------------------------
double OpenPrice = 0.0;
int orders=OrdersTotal();
for(int i=orders-1;i>=0;i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) { Print("Error in history!"); break; }
if(OrderSymbol()!=Symbol())continue;
if( OrderType()==OP_SELL||OrderType()==OP_BUY)
OpenPrice = OrderOpenPrice();
break;
}
//------если нет открытых позиций открывает два отложника------------------------------------------------------
int kolpos=0;
for (int pos=0; pos<OrdersTotal(); pos++)
{
OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic)
kolpos++;
}
if (kolpos==0)
{
OrderSend(Symbol(),OP_BUYSTOP,perv_Lot,Ask+shag1*Point,slipage,0,0,NULL,magic,0,clrGreen);
OrderSend(Symbol(),OP_SELLSTOP,perv_Lot,Bid-shag1*Point,slipage,0,0,NULL,magic,0,clrRed);
}
//--------------определяет если есть открытые позиции---------------------------------------------------------------------
int order=0;
for (int pos=0; pos<OrdersTotal(); pos++)
{
OrderSelect(pos,SELECT_BY_POS,MODE_TRADES);
if(OrderSymbol()==Symbol()&&OrderMagicNumber()==magic)
if(OrderType()==OP_SELL||OrderType()==OP_BUY) //если это продажи или покупки считаем что сделки открыты
order++;
}
if(order>0)
//--------------- находит и удаляет отложки.---------------------------------------------------------------
{
for(ic=OrdersTotal()-1;ic>=0;ic--)
{
if(OrderSelect(ic,SELECT_BY_POS,MODE_TRADES)==false) continue;
if (OrderSymbol()==Symbol())
{
if (OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP)//если это отложки то удаляем
{
ret=OrderDelete(OrderTicket());//удалил отложки
}
}}
//--------------ищем последний открытый ордер-------------------------------------
for(ic=OrdersTotal()-1;ic>=0;ic--)
{
if(OrderSelect(ic,SELECT_BY_POS,MODE_TRADES)==false) continue;
if (OrderSymbol()==Symbol()&&OrderMagicNumber()==magic&&OrderOpenPrice()==OpenPrice)
{
double minus=NormalizeDouble( Ask-OpenPrice,Digits);
double plus= NormalizeDouble(Ask-OpenPrice,Digits);
if(Digits==3)
{
minus=minus*100;
plus=plus*100;
}
if(Digits==5)
{
minus=minus*10000;
plus=plus*10000;
}
//-------------если последний открытый ордер SELL--------------------------------------------------------------
if (OrderType()==OP_SELL)
{
if(plus<=-profit)
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,slipage,0);
if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,slipage,0);
}
}
//---------------а если цена пошла в минус---------------------------------------------------------------------------
if( minus>=koredor)
{
double Lot=OrderLots();
OrderSend(Symbol(),OP_BUY,Lot*2,Ask,slipage,0,0,NULL,magic,0,clrRed);// открываем BUY с удвоеным лотом
}
}
double minusbuy=NormalizeDouble(Ask-OpenPrice,Digits);
double plusbuy=NormalizeDouble(Ask-OpenPrice,Digits);
if(Digits==3)
{
minusbuy=minusbuy*100;
plusbuy=plusbuy*100;
}
if(Digits==5)
{
minusbuy=minusbuy*10000;
plusbuy=plusbuy*10000;
}
//-----------------если последний ордер Buy--------------------------------------------------------------------------------
if (OrderType()==OP_BUY)
{
if(plusbuy>=profit)//-------если цена пошла в плюс-------------------------------------------------------
{
for(int i=OrdersTotal()-1;i>=0;i--)
{
OrderSelect(i,SELECT_BY_POS,MODE_TRADES);//---находим и закрываем все открытые ордера--------------------
if(OrderType()==OP_BUY)OrderClose(OrderTicket(),OrderLots(),Bid,slipage,0);
if(OrderType()==OP_SELL)OrderClose(OrderTicket(),OrderLots(),Ask,slipage,0);
}
}
//-----------------------------а если цена пошла в минус------------------------------------------------------------------
if(minusbuy<=-koredor)
{
Comment("Ордеров -",order);
double Lot=OrderLots();
OrderSend(Symbol(),OP_SELL,Lot*2,Bid,slipage,0,0,NULL,magic,0,clrRed);//открываем ордер SELL с удвоенным лотом----
}
}
}}}}
こんばんは、私の書いたEAとでも いうのでしょうか、よろしくお願いします。
一般的に、EAは私が期待したとおりの働きをしてくれます。しかし、ひとつだけ不思議な不具合があります。
1) 保留注文の代わりに、0.02ロットの売りポジションを最初に建てる場合があります。スクリプトによると、そうではないはずなのですが。(どこかのミス)。うまくいくときもあれば、最初の1枚でSellが開くときもあり、何が関係しているのか理解できない。
このエラーについて助けてください。私の文章や誤りについて、EAに総評を述べたいと思います。初めてのEAなので、シビアに判断してください。
まず、スタイラス(Ctrl +、)を使用して、すべてのコメントを修正するコンパイラが、たくさんある。
それから、これ。
double plusbuy=NormalizeDouble(Ask-OpenPrice,Digits);
if(Digits==3)
{
minusbuy=minusbuy*100;
plusbuy=plusbuy*100;
}
if(Digits==5)
{
minusbuy=minusbuy*10000;
plusbuy=plusbuy*10000;
}
は、簡単に、無理なく、これに変更することができます。
double minusbuy=NormalizeDouble((Ask-OpenPrice)/_Point,Digits);
double plusbuy=minusbuy;
同様に、コードの上にも。
ただし、Askは買いでも売りでもカウントされ、注文タイプが定義される前に計算が行われる理由は不明です。そしてOpenPriceはなぜか遠すぎて、数サイクル前に検出される。
まず、スタイラス(Ctrl+,)を使って、コンパイラがつけたコメントをすべて修正します(たくさんあります)。
それから、これ。
double plusbuy=NormalizeDouble(Ask-OpenPrice,Digits);
if(Digits==3)
{
minusbuy=minusbuy*100;
plusbuy=plusbuy*100;
}
if(Digits==5)
{
minusbuy=minusbuy*10000;
plusbuy=plusbuy*10000;
}
に簡単に、無理なく変化します。
double minusbuy=NormalizeDouble((Ask-OpenPrice)/_Point,Digits);
double plusbuy=minusbuy;
同様に、コード別では以上となります。
Askが購入と販売の両方でカウントされ、注文タイプが定義される前に計算が行われる理由は明確ではありませんが。OpenPriceはなぜか決まりすぎていて、さらに数サイクル早くなっています。
ありがとうございます、修正してみます。
ごあいさつテスト時に" cannot open file 'E:\MT4-1Alpari Limited MT4MQL4⇄indicators/ Indicator parameters WmiFor.ex4' [2]" と表示されるのですが、なぜでしょうか?
インジケーターがあり、それが機能する。https://www.mql5.com/ru/code/10394
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
extern string WmiFor = "Параметры индикатора WmiFor";
extern bool IsTopCorner = true; // Информационный блок в верхнем углу?
extern int Offset = 1; // Смещение исходного образца в барах (для проверки надежности прогноза) [1..]
extern bool IsOffsetStartFixed = true; // Фиксировано ли начало образца
extern bool IsOffsetEndFixed = false; // Фиксирован ли конец образца
extern int PastBars = 24; // Размер образца в барах, который ищется на истории [3..]
extern int ForecastBars = 24; // На сколько баров вперед делать прогноз [1..]
extern int MaxAlts = 5; // Искать указанное кол-во лучших образцов [1..100]
extern bool ShowCloud = true; // Показывать ли облако
extern bool ShowBestPattern = true; // Показывать ли максимально близкий образец
extern bool IsExactTime = true; // Должно ли совпадать время образцов (для учета эффекта сессий)
extern datetime MinDate = D'01.01.2001'; // Минимальная дата образца
extern int PeriodMA = 2; // Периуд сглаженной средней
extern double ScalePercents = 90.0; // Рассматривать только образцы с этим минимальным процентом совпадения
extern color IndicatorCloudColor = Sienna; // Цвет облака похожих вариантов
extern color IndicatorBestPatternColor = DodgerBlue; // Цвет самого похожего образца
extern color IndicatorVLinesColor = Sienna; // Цвет вертикальных линий-границ образца
extern color IndicatorTextColor = MediumBlue; // Цвет текста инф.блока
extern color IndicatorTextWarningColor = Tomato; // Цвет предупреждений в тестовом инф.блоке
extern int XCorner = 5; // Отступ инф.блока индикатора от правой границы графика
extern int YCorner = 5; // Отступ инф.блока индикатора от верхней границы графика
extern string FontName = "Arial"; // Шрифт тестового инф.блока
extern int FontSize = 7; // Размер шрифта тестового инф.блока
double Index0, Index1, Index2, Index3, Index4, Index5;
void OnTick()
{
Index0 = iCustom(NULL, 0, WmiFor, IsTopCorner, Offset, IsOffsetStartFixed, IsOffsetEndFixed, PastBars, ForecastBars, MaxAlts, ShowCloud, ShowBestPattern, IsExactTime, MinDate, PeriodMA,
ScalePercents, IndicatorCloudColor, IndicatorBestPatternColor, IndicatorVLinesColor, IndicatorTextColor, IndicatorTextWarningColor, XCorner, YCorner, FontName, FontSize, 0, 3);
Index1 = iCustom(NULL, 0, WmiFor, IsTopCorner, Offset, IsOffsetStartFixed, IsOffsetEndFixed, PastBars, ForecastBars, MaxAlts, ShowCloud, ShowBestPattern, IsExactTime, MinDate, PeriodMA,
ScalePercents, IndicatorCloudColor, IndicatorBestPatternColor, IndicatorVLinesColor, IndicatorTextColor, IndicatorTextWarningColor, XCorner, YCorner, FontName, FontSize, 1, 3);
Index2 = iCustom(NULL, 0, WmiFor, IsTopCorner, Offset, IsOffsetStartFixed, IsOffsetEndFixed, PastBars, ForecastBars, MaxAlts, ShowCloud, ShowBestPattern, IsExactTime, MinDate, PeriodMA,
ScalePercents, IndicatorCloudColor, IndicatorBestPatternColor, IndicatorVLinesColor, IndicatorTextColor, IndicatorTextWarningColor, XCorner, YCorner, FontName, FontSize, 2, 3);
Index3 = iCustom(NULL, 0, WmiFor, IsTopCorner, Offset, IsOffsetStartFixed, IsOffsetEndFixed, PastBars, ForecastBars, MaxAlts, ShowCloud, ShowBestPattern, IsExactTime, MinDate, PeriodMA,
ScalePercents, IndicatorCloudColor, IndicatorBestPatternColor, IndicatorVLinesColor, IndicatorTextColor, IndicatorTextWarningColor, XCorner, YCorner, FontName, FontSize, 3, 3);
Index4 = iCustom(NULL, 0, WmiFor, IsTopCorner, Offset, IsOffsetStartFixed, IsOffsetEndFixed, PastBars, ForecastBars, MaxAlts, ShowCloud, ShowBestPattern, IsExactTime, MinDate, PeriodMA,
ScalePercents, IndicatorCloudColor, IndicatorBestPatternColor, IndicatorVLinesColor, IndicatorTextColor, IndicatorTextWarningColor, XCorner, YCorner, FontName, FontSize, 4, 3);
Index5 = iCustom(NULL, 0, WmiFor, IsTopCorner, Offset, IsOffsetStartFixed, IsOffsetEndFixed, PastBars, ForecastBars, MaxAlts, ShowCloud, ShowBestPattern, IsExactTime, MinDate, PeriodMA,
ScalePercents, IndicatorCloudColor, IndicatorBestPatternColor, IndicatorVLinesColor, IndicatorTextColor, IndicatorTextWarningColor, XCorner, YCorner, FontName, FontSize, 5, 3);
Comment ( "0==", DoubleToString(Index0,Digits), " 1==", DoubleToString(Index1,Digits), " 2==", DoubleToString(Index2,Digits),
" 3==", DoubleToString(Index3,Digits)," 4==", DoubleToString (Index4, Digits), " 5==", DoubleToString (Index5, Digits));
}
//+------------------------------------------------------------------+
ごあいさつテスト時に" cannot open file 'E:\MT4-1Alpari Limited MT4MQL4⇄indicators/ Indicator parameters WmiFor.ex4' [2]" と表示されるのですが、なぜでしょうか?
インジケーターがあり、それが機能する。https://www.mql5.com/ru/code/10394
#property link "https://www.mql5.com"
#property version "1.00"
#property strict
extern string WmiFor = "Параметры индикатора WmiFor";
void OnTick()
{
Index5 = iCustom(NULL, 0, WmiFor, IsTopCorner, Offset, IsOffsetStartFixed, IsOffsetEndFixed, PastBars, ForecastBars, MaxAlts, ShowCloud, ShowBestPattern, IsExactTime, MinDate, PeriodMA,
ScalePercents, IndicatorCloudColor, IndicatorBestPatternColor, IndicatorVLinesColor, IndicatorTextColor, IndicatorTextWarningColor, XCorner, YCorner, FontName, FontSize, 5, 3);
Comment ( "0==", DoubleToString(Index0,Digits), " 1==", DoubleToString(Index1,Digits), " 2==", DoubleToString(Index2,Digits),
" 3==", DoubleToString(Index3,Digits)," 4==", DoubleToString (Index4, Digits), " 5==", DoubleToString (Index5, Digits));
}
//+------------------------------------------------------------------+
iCustom」についてのドキュメントを読み、インジケータに 正しくアクセスする方法を確認する
ありがとうございます。
逆さカンマを忘れていたよ、このバカ。
こんにちは。
何が問題なのか、調べるのを手伝ってください。線がバーと交差したときの価格を出力する必要があります。コードを書きました。
int start() {
double pr=ObjectGetValueByShift("line",0)。
アラート(pr)。
return(0);}。
line は行の名前です。
このコードでは常に "0 "が表示されます。どうしたんですか?
こんにちは。
何が問題なのか、調べるのを手伝ってください。線がバーと交差したときの価格を出力する必要があります。コードを書きました。
int start() {
double pr=ObjectGetValueByShift("line",0)。
アラート(pr)。
return(0);}。
line は行の名前です。
このコードでは常に "0 "が表示されます。どうしたんですか?
トレンドライン はありますか?
そして、視覚的に0バーを超える(下回る)、いいえ、プロパティでチェックボックス、ビーム。
皆さん、こんにちは。
質問ですが、インスタで注文を出そうと すると、ストップがおかしいと言われます。
以下、セリフそのものです。
OrderSend(Symbol(),OP_BUYSTOP,Lots,HiP,3,0,NULL,111,0,clrBlue)を実行。
Stop LossとTake Pointが0になっています。Stop Lossに数字を設定すると全て正常です。
ストップロスは必要ない。どうしたらいいのでしょうか?