奇狐社區論壇 > 指標公式 > 問題交流 > [問題]請問: 多空=0 跟 多空[i]=0 有什麼不一樣?我發現有時加上[i]可以編過,有時不行? |
|
 |
P2372
中級會員

註冊日期: Mar 2012
來 自: 台北
文章數量: 35 |
[問題]請問: 多空=0 跟 多空[i]=0 有什麼不一樣?我發現有時加上[i]可以編過,有時不行?
P:EMA(C,5);
A:=C>P;
X:=C>P+20;
S:=C<P;
Z:=C<P-20;
多進:A or barpos=0,COLORRED;
平多:X or barpos=0,COLORGREEN;
空進:S or barpos=0,COLORGREEN;
平空:Z or barpos=0,COLOR5500AA;
利潤:C*0;//因為不會寫記下當時的買賣值, 所以還沒寫???
// 平多:=賺50點 or barpos=0;//H-多進>=50多先出一口=做多平倉
// 平多:=賠50點 or barpos=0;//多進-L>=50多先出一口=多單停損
// 平空:=賺50點 or barpos=0;//空進-L>=50多先出一口=做空平倉
// 平空:=賠50點 or barpos=0;//H-空進>=50多先出一口=空單停損
進出:c*0;
TEST:0;//檢查是否進入判斷式的旗標
//[進出] 這變數值代表進出的點數.
// 1.多進, -1.空進 0.空手
多空:c*0,COLOR999900; //1.多 -1.空 0.無,是狀態旗標
for i = 1 to datacount do
begin
if 多空[i]=0 then
begin
多空[i]:=多進[i]-空進[i];test:=0;
end
else if 多空[i]=1 then
begin
if 平多[i]=1 then
begin
多空[i]:=0;test:=1;
end
else if 空進[i]=1 then
begin
多空[i]:=-1;test:=2;
end
else break
end
else if 多空[i]=-1 then
begin
if 平空[i]=1 then
begin
多空[i]:=0;test:=3;
end
else if 多進[i]=1 then
begin
多空[i]:=1;test:=4;
end
else break
end
else break
end;
我想做的效果:
1. 買訊出現, 多空=1, 並且記下那根K線的P值(=進出)
2. 賣訊出現, 多空=-1, 並且記下那跟K線的P值(=進出)
同時,計算出PR值=利潤=(P買-P賣)
3. 停損停利點滿足時, 做出平多或是平空, 並且將 多空=0(還沒寫)
請問版主, 我應該如何修改程式?我嘗試了10天了, 實在搞不懂奇狐的公式寫法? 求助解答下
__________________
win365
|
|
向版主報告此篇 |  |
|
2013-01-14 10:55 |
|
|
|  |
 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18197 |
回覆: [問題]請問: 多空=0 跟 多空[i]=0 有什麼不一樣?我發現有時加上[i]可以編過,有時不行?
引用: 最初由 P2372 發表
P:EMA(C,5);
A:=C>P;
X:=C>P+20;
S:=C<P;
Z:=C<P-20;
多進:A or barpos=0,COLORRED;
平多:X or barpos=0,COLORGREEN;
空進:S or barpos=0,COLORGREEN;
平空:Z or barpos=0,COLOR5500AA;
利潤:C*0;//因為不會寫記下當時的買賣值, 所以還沒寫???
// 平多:=賺50點 or barpos=0;//H-多進>=50多先出一口=做多平倉
// 平多:=賠50點 or barpos=0;//多進-L>=50多先出一口=多單停損
// 平空:=賺50點 or barpos=0;//空進-L>=50多先出一口=做空平倉
// 平空:=賠50點 or barpos=0;//H-空進>=50多先出一口=空單停損
進出:c*0;
TEST:0;//檢查是否進入判斷式的旗標
//[進出] 這變數值代表進出的點數.
// 1.多進, -1.空進 0.空手
多空:c*0,COLOR999900; //1.多 -1.空 0.無,是狀態旗標
for i = 1 to datacount do
begin
if 多空[i]=0 then
begin
多空[i]:=多進[i]-空進[i];test:=0;
end
else if 多空[i]=1 then
begin
if 平多[i]=1 then
begin
多空[i]:=0;test:=1;
end
else if 空進[i]=1 then
begin
多空[i]:=-1;test:=2;
end
else break
end
else if 多空[i]=-1 then
begin
if 平空[i]=1 then
begin
多空[i]:=0;test:=3;
end
else if 多進[i]=1 then
begin
多空[i]:=1;test:=4;
end
else break
end
else break
end;
我想做的效果:
1. 買訊出現, 多空=1, 並且記下那根K線的P值(=進出)
2. 賣訊出現, 多空=-1, 並且記下那跟K線的P值(=進出)
同時,計算出PR值=利潤=(P買-P賣)
3. 停損停利點滿足時, 做出平多或是平空, 並且將 多空=0(還沒寫)
請問版主, 我應該如何修改程式?我嘗試了10天了, 實在搞不懂奇狐的公式寫法? 求助解答下
每套程式的迴圈應用寫法, 都有其各自的考量
迴圈搭配數列存取, 您必需先對它熟悉並了解
看懂理解原程式的運作架構後, 才有可能去修改它
|
|
向版主報告此篇 |  |
|
2013-01-14 11:24 |
|
|
|  |
 |
P2372
中級會員

註冊日期: Mar 2012
來 自: 台北
文章數量: 35 |
我修改了程式, 從test的值=2可以看出, 沒有進入(多空=-1迴圈)為什麼
第3根k線時,應該進入這個判斷式迴圈中, 但是 不管我的游標如何移動, 結果都沒有改變?
從test的值=2可以看出, 沒有進入(多空=-1迴圈)為什麼?
並且奇怪的是, 為何不管游標如何移動到任何點, 畫面上的輸出的(變數多空)值, 永遠都沒有改變?從第1根到最後1根都是-1?
請協助解答, 謝謝
P2372 附帶上了此圖片:
__________________
win365
|
|
向版主報告此篇 |  |
|
2013-01-14 14:19 |
|
|
|  |
 |
P2372
中級會員

註冊日期: Mar 2012
來 自: 台北
文章數量: 35 |
補充:補上程式原碼
P:EMA(C,5),colorffffff,linethick3;
A:=C>P;
X:=C>P+20;
S:=C<P;
Z:=C<P-20;
多進:A or barpos=0,COLORRED;
drawicon(A,L-2,4);
平多:X or barpos=0,COLORGREEN;
drawicon(X,H+5,11);
空進:S or barpos=0,COLORGREEN;
drawicon(S,H+2,5);
平空:Z or barpos=0,COLOR5500AA;
drawicon(Z,L-5,10);
// 平多:=賺50點 or barpos=0;//H-多進>=50多先出一口=做多平倉
// 平多:=賠50點 or barpos=0;//多進-L>=50多先出一口=多單停損
// 平空:=賺50點 or barpos=0;//空進-L>=50多先出一口=做空平倉
// 平空:=賠50點 or barpos=0;//H-空進>=50多先出一口=空單停損
進出:c*0,COLOR000000;
TEST:0,COLOR000000;
//[進出] 這變數值代表進出的點數.
// 1.多進, -1.空進 0.空手
//多空[i]:=0;是將 "多" 這個數列, 其中的第 i 個元素, 設定為零
//多空:=0;是將 "多" 這個變數(非數列), 設定為零
多空:0,COLOR999900; //1.多 -1.空 0.無,是狀態旗標
多進t:0;
利潤:0;
for i = 1 to datacount do
begin
if 多空=0 then
begin
多空:=多進[i]-空進[i];test:=0;
end
else if 多空=1 then
begin
if 平多[i]=1 then
begin
多空:=0;test:=1;
end
else if 空進[i]=1 then
begin
多空:=-1;test:=2;
end
else break
end
else if 多空=-1 then
begin
if 平空[i]=1 then
begin
多空:=0;test:=3;
end
else if 多進[i]=1 then
begin
多空:=1;test:=4;
end
else break
end
else break
end;
__________________
win365
|
|
向版主報告此篇 |  |
|
2013-01-14 14:21 |
|
|
|  |
 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18197 |
回覆: 我修改了程式, 從test的值=2可以看出, 沒有進入(多空=-1迴圈)為什麼
引用: 最初由 P2372 發表
第3根k線時,應該進入這個判斷式迴圈中, 但是 不管我的游標如何移動, 結果都沒有改變?
從test的值=2可以看出, 沒有進入(多空=-1迴圈)為什麼?
並且奇怪的是, 為何不管游標如何移動到任何點, 畫面上的輸出的(變數多空)值, 永遠都沒有改變?從第1根到最後1根都是-1?
請協助解答, 謝謝
因為錯用, 所以會有錯的結果
多空:=C*0; //此時 "多空" 是個數列, 自頭到尾值均為零 (因為 Close是數列)
多空[50]:=1; //將 "多空" 的第50根K棒值設為 1, 其餘不變 , "多空" 仍是數列
多空:=0; //將 "多空" 定義為零, "多空" 不再是數列
何謂數列? 數列如何存取? 您需先去了解學習清楚, 再去應用
|
|
向版主報告此篇 |  |
|
2013-01-14 14:44 |
|
|
|  |
 |
P2372
中級會員

註冊日期: Mar 2012
來 自: 台北
文章數量: 35 |
上個問題您已經回復數列跟變數的不同,我已經修改了
上個問題您已經回復數列跟變數的不同,我已經修改了程式裡頭多空:=c*0;這個錯誤, 所以附上新的原碼板主可能沒有注意到,
謝謝您的指導, 數列跟變數我知道的,
a[5]:=a[0,1,2,3,4]共有5個元素,
a:=5; 只有1個元素
這我知道,
麻煩板主看新的原碼, 再次麻煩下, 不好意思, 請您再次指點:
新的原碼的多空變數已經改變如下了:
多空:0,COLOR999900; //1.多 -1.空 0.無,是狀態旗標
P:EMA(C,5),colorffffff,linethick3;
A:=C>P;
X:=C>P+20;
S:=C<P;
Z:=C<P-20;
多進:A or barpos=0,COLORRED;
drawicon(A,L-2,4);
平多:X or barpos=0,COLORGREEN;
drawicon(X,H+5,11);
空進:S or barpos=0,COLORGREEN;
drawicon(S,H+2,5);
平空:Z or barpos=0,COLOR5500AA;
drawicon(Z,L-5,10);
// 平多:=賺50點 or barpos=0;//H-多進>=50多先出一口=做多平倉
// 平多:=賠50點 or barpos=0;//多進-L>=50多先出一口=多單停損
// 平空:=賺50點 or barpos=0;//空進-L>=50多先出一口=做空平倉
// 平空:=賠50點 or barpos=0;//H-空進>=50多先出一口=空單停損
進出:c*0,COLOR000000;
TEST:0,COLOR000000;
//[進出] 這變數值代表進出的點數.
// 1.多進, -1.空進 0.空手
//多空[i]:=0;是將 "多" 這個數列, 其中的第 i 個元素, 設定為零
//多空:=0;是將 "多" 這個變數(非數列), 設定為零
多空:0,COLOR999900; //1.多 -1.空 0.無,是狀態旗標
多進t:0;
利潤:0;
for i = 1 to datacount do
begin
if 多空=0 then
begin
多空:=多進[i]-空進[i];test:=0;
end
else if 多空=1 then
begin
if 平多[i]=1 then
begin
多空:=0;test:=1;
end
else if 空進[i]=1 then
begin
多空:=-1;test:=2;
end
else break
end
else if 多空=-1 then
begin
if 平空[i]=1 then
begin
多空:=0;test:=3;
end
else if 多進[i]=1 then
begin
多空:=1;test:=4;
end
else break
end
else break
end;
__________________
win365
|
|
向版主報告此篇 |  |
|
2013-01-14 15:08 |
|
|
|  |
 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18197 |
回覆: 上個問題您已經回復數列跟變數的不同,我已經修改了
引用: 最初由 P2372 發表
上個問題您已經回復數列跟變數的不同,我已經修改了程式裡頭多空:=c*0;這個錯誤, 所以附上新的原碼板主可能沒有注意到,
謝謝您的指導, 數列跟變數我知道的,
a[5]:=a[0,1,2,3,4]共有5個元素,
a:=5; 只有1個元素
這我知道,
麻煩板主看新的原碼, 再次麻煩下, 不好意思, 請您再次指點:
新的原碼的多空變數已經改變如下了:
多空:0,COLOR999900; //1.多 -1.空 0.無,是狀態旗標
P:EMA(C,5),colorffffff,linethick3;
A:=C>P;
X:=C>P+20;
S:=C<P;
Z:=C<P-20;
多進:A or barpos=0,COLORRED;
drawicon(A,L-2,4);
平多:X or barpos=0,COLORGREEN;
drawicon(X,H+5,11);
空進:S or barpos=0,COLORGREEN;
drawicon(S,H+2,5);
平空:Z or barpos=0,COLOR5500AA;
drawicon(Z,L-5,10);
// 平多:=賺50點 or barpos=0;//H-多進>=50多先出一口=做多平倉
// 平多:=賠50點 or barpos=0;//多進-L>=50多先出一口=多單停損
// 平空:=賺50點 or barpos=0;//空進-L>=50多先出一口=做空平倉
// 平空:=賠50點 or barpos=0;//H-空進>=50多先出一口=空單停損
進出:c*0,COLOR000000;
TEST:0,COLOR000000;
//[進出] 這變數值代表進出的點數.
// 1.多進, -1.空進 0.空手
//多空[i]:=0;是將 "多" 這個數列, 其中的第 i 個元素, 設定為零
//多空:=0;是將 "多" 這個變數(非數列), 設定為零
多空:0,COLOR999900; //1.多 -1.空 0.無,是狀態旗標
多進t:0;
利潤:0;
for i = 1 to datacount do
.............................
問題在迴圈內
迴圈內, 您程式並無把結果存於數列之中
|
|
向版主報告此篇 |  |
|
2013-01-14 15:16 |
|
|
|  |
 |
P2372
中級會員

註冊日期: Mar 2012
來 自: 台北
文章數量: 35 |
我修改了程式, 但是仍然沒有進入迴圈?
P:EMA(C,5),colorffffff,linethick3;
A:=C>P;
X:=C>P+20;
S:=C<P;
Z:=C<P-20;
多進:A or barpos=0,COLORRED;
drawicon(A,L-2,4);
平多:X or barpos=0,COLORGREEN;
drawicon(X,H+5,11);
空進:S or barpos=0,COLORGREEN;
drawicon(S,H+2,5);
平空:Z or barpos=0,COLOR5500AA;
drawicon(Z,L-5,10);
// 平多:=賺50點 or barpos=0;//H-多進>=50多先出一口=做多平倉
// 平多:=賠50點 or barpos=0;//多進-L>=50多先出一口=多單停損
// 平空:=賺50點 or barpos=0;//空進-L>=50多先出一口=做空平倉
// 平空:=賠50點 or barpos=0;//H-空進>=50多先出一口=空單停損
進出:c*0,COLOR000000;
TEST:0,COLOR000000;
//[進出] 這變數值代表進出的點數.
// 1.多進, -1.空進 0.空手
//多空[i]:=0;是將 "多" 這個數列, 其中的第 i 個元素, 設定為零
//多空:=0;是將 "多" 這個變數(非數列), 設定為零
多空:0,COLOR999900; //1.多 -1.空 0.無,是狀態旗標
多進t:0;
利潤:0;
for i = 1 to datacount do
begin
if 多空=0 then
begin
多空:=多進[i]-空進[i];test:=0;
end
else if 多空=1 then
begin
if 平多[i]=1 then
begin
多空:=(多進[i]-平多[i])-空進[i];test:=1;
end
else if 空進[i]=1 then
begin
多空:=(多進[i]-平多[i])-空進[i];test:=2;
end
else break
end
else if 多空=-1 then
begin
if 平空[i]=1 then
begin
多空:=多進[i]-(空進[i]-平空[i]);test:=3;
end
else if 多進[i]=1 then
begin
多空:=多進[i]-(空進[i]-平空[i]);test:=4;
end
else break
end
else break
end;
__________________
win365
|
|
向版主報告此篇 |  |
|
2013-01-14 19:04 |
|
|
|  |
 |
P2372
中級會員

註冊日期: Mar 2012
來 自: 台北
文章數量: 35 |
補充: 我加入了我的想法, 請指點哪裡錯了?
版主老大:
我的疑問: 為何沒有進入迴圈: 多空=-1的多進=1的這個迴圈?
如果有進入, TEST這個FLAG應該被改成了4,
但是驗證的結果-->TEST旗標永遠都是2, 不管我的游標如何移動, 從2008年到2013年都是如此?
請指點下, 謝謝
P2372 附帶上了此圖片:
__________________
win365
|
|
向版主報告此篇 |  |
|
2013-01-14 19:11 |
|
|
|  |
 |
cgjj
總版主

註冊日期: Oct 2003
來 自:
文章數量: 18197 |
回覆: 補充: 我加入了我的想法, 請指點哪裡錯了?
引用: 最初由 P2372 發表
P:EMA(C,5),colorffffff,linethick3;
A:=C>P;
X:=C>P+20;
S:=C<P;
Z:=C<P-20;
多進:A or barpos=0,COLORRED;
drawicon(A,L-2,4);
平多:X or barpos=0,COLORGREEN;
drawicon(X,H+5,11);
空進:S or barpos=0,COLORGREEN;
drawicon(S,H+2,5);
平空:Z or barpos=0,COLOR5500AA;
drawicon(Z,L-5,10);
// 平多:=賺50點 or barpos=0;//H-多進>=50多先出一口=做多平倉
// 平多:=賠50點 or barpos=0;//多進-L>=50多先出一口=多單停損
// 平空:=賺50點 or barpos=0;//空進-L>=50多先出一口=做空平倉
// 平空:=賠50點 or barpos=0;//H-空進>=50多先出一口=空單停損
進出:c*0,COLOR000000;
TEST:0,COLOR000000;
//[進出] 這變數值代表進出的點數.
// 1.多進, -1.空進 0.空手
//多空[i]:=0;是將 "多" 這個數列, 其中的第 i 個元素, 設定為零
//多空:=0;是將 "多" 這個變數(非數列), 設定為零
多空:0,COLOR999900; //1.多 -1.空 0.無,是狀態旗標
多進t:0;
利潤:0;
for i = 1 to datacount do
begin
if 多空=0 then
begin
多空:=多進[i]-空進[i];test:=0;
end
else if 多空=1 then
begin
if 平多[i]=1 then
begin
多空:=(多進[i]-平多[i])-空進[i];test:=1;
end
else if 空進[i]=1 then
begin
多空:=(多進[i]-平多[i])-空進[i];test:=2;
end
else break
end
else if 多空=-1 then
begin
if 平空[i]=1 then
begin
多空:=多進[i]-(空進[i]-平空[i]);test:=3;
end
else if 多進[i]=1 then
begin
多空:=多進[i]-(空進[i]-平空[i]);test:=4;
end
else break
end
else break
end;
我的疑問: 為何沒有進入迴圈: 多空=-1的多進=1的這個迴圈?
如果有進入, TEST這個FLAG應該被改成了4,
但是驗證的結果-->TEST旗標永遠都是2, 不管我的游標如何移動, 從2008年到2013年都是如此?
請指點下, 謝謝
問題1:
"第2根K線是多空[1]" <== 不對
第2根K線應該是 [2] , 而不是 [1]
奇狐數列起點並非自零數起,而是自1數起
問題2:
前段程式
"多空" 這變數自頭到尾, 都不曾經是數列
故根本沒有 多空[n] 這種東西存在
問題3:
break 是跳離當前這層迴圈
不會再跑這層迴圈內的其他程式
註: 前段程式, 僅有一層迴圈
誤用 break, 當然後面的程序不會再被進行
|
|
向版主報告此篇 |  |
|
2013-01-15 11:15 |
|
|
|  |
 |
P2372
中級會員

註冊日期: Mar 2012
來 自: 台北
文章數量: 35 |
感謝版主的回覆, 我依照您的說明重新修改了原碼做測試, 仍然有問題
請版主協助看下我的觀念有沒有錯?
附上原碼及語句理解圖, 請看看對不對?
如果沒有錯, 為何不管游標如何移動, 結果仍然是不對?
修改內容:
1..我拿掉了 BREAK
2..拿掉了多空[N]的觀念, 把 多空 及 進出都當作一般的變數來用
3..檢查了我的迴圈關係.
執行的結果:迴圈永遠在TEST4,
但是這行明明有:這語句, 為何結果還是都不變?
多空:=多進[i]-(空進[i]-平空[i]);進出:=P[i];test:=4
P:EMA(C,5),colorffffff,linethick3;
A:=C>P;
X:=C>P+50;
S:=C<P;
Z:=C<P-50;
多進:A or barpos=0,COLORRED;
drawicon(A,L-2,4);
平多:X or barpos=0,COLORGREEN;
drawicon(X,H+5,11);
空進:S or barpos=0,COLORGREEN;
drawicon(S,H+2,5);
平空:Z or barpos=0,COLOR5500AA;
drawicon(Z,L-5,10);
進出:0,COLOR000000;
TEST:0,COLOR000000;
//[進出] 這變數值代表進出的點數.
多空:0,COLOR999900; //1.多 -1.空 0.無,是狀態旗標
利潤:0;
for i = 1 to datacount do begin
if 多空=0 then begin
多空:=多進[i]-空進[i];進出:=P[i];test:=0;end
else begin {多空<>0}
if 多空=1 then begin
if 平多[i]=1 then begin
多空:=(多進[i]-平多[i])-空進[i];進出:=P[i];test:=1;end;
else if 空進[i]=1 then begin
多空:=(多進[i]-平多[i])-空進[i];進出:=P[i];test:=2;end;end;
else begin
if 多空=-1 then begin
if 平空[i]=1 then begin
多空:=多進[i]-(空進[i]-平空[i]);進出:=P[i];test:=3;end;
else if 多進[i]=1 then begin
多空:=多進[i]-(空進[i]-平空[i]);進出:=P[i];test:=4;end;end;
else test:=5;
end;
end;
end;
P2372 附帶上了此圖片:
__________________
win365
|
|
向版主報告此篇 |  |
|
2013-01-15 16:49 |
|
|
|  |
 |
P2372
中級會員

註冊日期: Mar 2012
來 自: 台北
文章數量: 35 |
補充說明:前4根K線的變數關係
修改內容:
1..我拿掉了 BREAK
2..拿掉了多空[N]的觀念, 把 多空 及 進出都當作一般的變數來用
3..檢查了我的迴圈關係.
執行的結果:迴圈永遠在TEST4,
但是這行明明有:這語句, 為何結果還是都不變?
多空:=多進[i]-(空進[i]-平空[i]);進出:=P[i];test:=4
P2372 附帶上了此圖片:
__________________
win365
|
|
向版主報告此篇 |  |
|
2013-01-15 16:52 |
|
|
|  |
本站所有內容未經作者授權禁止轉貼節錄, 發表言論僅供參考勿作為投資決策依據。瀏覽本站請使用 IE 5.5 以上版本, 最佳瀏覽解析度 1024 x 768 全彩。
|
Powered by: vBulletin Version 2.3.0 - Copyright©2000-, Jelsoft Enterprises Limited.
簡愛洋行 製作 Copyright 2003-. All Rights Reserved. 聯絡我們
|