#property strict#include <Indicators\Trend.mqh>
bool ind;
CiMA MA;
externint pos=1;
externint sl=40;
externint tp=70;
datetime time;
datetime time2;
bool trade=false;
bool trade2=false;
int a,b;
intOnInit()
{
//---
MA.Create(Symbol(),PERIOD_CURRENT,10,6,MODE_EMA,PRICE_CLOSE);//создал машку//---return(INIT_SUCCEEDED);
}
voidOnTick()
{
//---if(IsNewBar()==true)//если новый бар включаемся
{
if(buy(pos)==true)//если цена выше МА продолжаем
{
if(!ExistPositions(Symbol(),-1,-1,0))//если нету открых ордеров продолжаем
{
if(GetTypeLastClosePos(Symbol(),-1)!=OP_BUY)//если тип последней закрытой позиции был не на покупку то тогда только покупаем таким образом я пред остерегаюсь от повторных входов в покупку если цена //все ещо выше МА...но почему то не работает открываются и дальше сделки на покупку если ордер закрылся выше МА....ХОТЯ НЕ ДОЛЖО ТАК КАК Я ОГРАНИЧИЛ ПО ТИПУ ПОЗИЦИИ ПОСЛЕДНЮЮ СДЕЛКУ И ОНИ ДОЛЖНЫ ТОЛЬКО // ЧЕРЕДОВАТСЯ И УЖ НИ КАК НЕ ПОВТОРЯТСЯ ПО НЕСКОЛЬКО РАЗ ПОДРЯД
{
trade=true;
}
if(trade==true)
{
OpenPosition(Symbol(),OP_BUY,0.1,Ask-sl*Point,Ask+tp*Point);
trade=false;
}
}
}
if(sell(pos)==true)
{
if(!ExistPositions(Symbol(),-1,-1,0))
{
if(GetTypeLastClosePos(Symbol(),-1)!=OP_SELL)
{
trade2=true;
}
if(trade2==true)
{
OpenPosition(Symbol(),OP_SELL,0.1,Bid+sl*Point,Bid-tp*Point);
trade=false;
}
}}
}
}
//возвращает истину если закрытие бара с указаной позицией выше МАbool buy(int pos)
{
if(iClose(Symbol(),0,pos)>MA.Main(1))
returntrue;
elsereturnfalse;
}
//+------------------------------------------------------------------+//| возвращает истину если закрытие бара с указаной позицией ниже МА//+------------------------------------------------------------------+bool sell(int pos)
{
if(iClose(Symbol(),0,pos)<MA.Main(1))
returntrue;
elsereturnfalse;
}
もちろん、必要です!では、この構造を応用して最小値を探すにはどうすればいいのか。頭で考えても無理です)
最大値を求めるために、変数valには0が代入される(明らかにどの指標値よりも小さい)。
つまり、最小値を求めるためには、意図的に高い値を加えなければならない。EMPTY_VALUE 定数やインジケータ値を、最小値を検索するバーで直接使用することができます。
あるいはこんな感じ。
もちろん、必要です!では、この構造を応用して、最小値を求めるにはどうしたらよいのでしょうか。ブレインストーミングでは解けない)
1と出ます。そして、配列の宣言の仕方を学びたい。こんな風にやってみました。
ループは34個の値を通過し、配列には33個のセルしか含まれません、正しいです。
そして、ArrayMinimum(num_array,WHOLE_ARRAY,0) を試してみてください。
...また、配列の宣言の仕方も学びたいのですが・・・。
トレーニングや認知のためだけなら...。
最小値と最大値を決定する周期 - チューニングや最適化を可能にするため、外部パラメータとする必要があります。
そのため、まず配列はサイズなしで宣言されます。
double val[];
配列の宣言は関数内ではなく、コモンセクションで行われます。
init関数では、配列にサイズが設定されます。
次に、start 関数で、配列を埋めていきます。
最後に、ArrayMaximum() とArrayMinimum()を配列に適用する。
最大値を求めるために、変数valには0という値が代入される(明らかにインジケータのどの値よりも小さい)。
つまり、最小値を求めるためには、意図的に高い値を加えなければならない。EMPTY_VALUE定数やインジケータ値を、最小値を検索するバーで直接使用することができます。
あるいはこんな感じ。
配列には33個のセルしかないのに、ループは34個の値を通過している、修正せよ。
そして、ArrayMinimum(num_array,WHOLE_ARRAY,0) を試してみてください。
プログラマー仲間の皆様へ困っています、助けてください。
このコードについては、すでに頭を悩ませている。
以下は、機能の全体像です。
リーチプリントで、このような出力が得られます。
チケット:225299700はOP_SELLLIMITのオーダーチケット ですが。
そして、この選択された注文のストップロスを予想通り修正します。しかし、OP_BUYは、存在するはずなのに、見当たりません。
何が問題なのでしょうか?なぜ、こんなことをするのだろう?わかるように教えてください!
関数に関するもう一つの質問
矩形を後方ではなく前方に描画する方法、例えば指定した 価格で5本前方に描画する......そして再描画しないようにするには
調べてみました。ありがとうございます。
質問にはあまり情報がないのですが。月の1時間足のバーには極値がたくさんあります。ところで、極値とは具体的にどのようなものなのでしょうか?